android - CheckedTextView 设置为在 ListView 中检查oncreate?

标签 android

我正在尝试制作一个购物 list ,如果您之前已经选择了您的商品,则会检查 CheckedTextView,即如果选择了该商品,则该商品的 bool 值设置为 true。

我已经覆盖了 getview 方法以使用 setText() 更改 CheckedTextView 文本,这有效,但在 CheckedTextView 中设置 setChecked(true) 方法不会使其被选中。

我知道我没有在 getview() 中回收任何 View ,那将是项目中的一个后期项目,知道我需要看到一个绿色的复选标记 =)

有什么想法吗?请帮忙。

我的 xml 文件:

测试.xml

 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/textCheckMark" 
    android:paddingLeft="5dip" 
    android:paddingRight="50dip" 
    android:textColor="#000000" 
    android:background="#ffffff"
    android:tag="text1"
    android:text="testtestetstt"
    android:focusable="false"/> 

listfippel.java

package nu.listfippel.mitt;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.app.ListActivity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.text.Spannable;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CheckedTextView;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class listfippel extends ListActivity {

    //ArrayList<Ingred> ing; 
    Ingred i1 = new Ingred("banan", 2, 1, true);
    Ingred i2 = new Ingred("äpple", 3, 1, false);
    Ingred i3 = new Ingred("päron", 3, 1, true);
    Ingred i4 = new Ingred("gröt", 3, 1, false);
    Ingred i5 = new Ingred("bröd", 3, 1, false);
    Ingred i6 = new Ingred("kyckling", 3, 1, false);
    Ingred i7 = new Ingred("röd paprika", 3, 1, false);
    Ingred i8 = new Ingred("tårta", 3, 1, false);
    Ingred i9 = new Ingred("bappelsin", 3, 1, false);
    Ingred i10 = new Ingred("gurka", 3, 1, true);
    CheckedTextView ctv;
    Ingred[] ingarray = { i1, i2, i3, i4, i5, i6, i7, i8, i9, i10 };


    Ingadapter adapter;
    Ingred temp;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);


        ArrayList<Ingred> ing = new ArrayList<Ingred>(Arrays.asList(ingarray));

        adapter = new Ingadapter(this, R.layout.test, ing);
        //adapter = new IngArrayAdapter(ing);

        OnItemClickListener il = new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View arg1, int index,
                    long arg3) {

                temp = (Ingred)parent.getItemAtPosition(index);


                if (temp.getCheck()){  
                    Toast toast = Toast.makeText(getApplicationContext(), 
                            "Du avmarkerade nyss den\nklarmarkerade varan " + parent.getItemAtPosition(index).toString(), 
                            Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                    toast.show();
                }

                if (!temp.getCheck()){
                    temp.setCheck(true);

                    //ctv.setChecked(true);
                }
                else {
                    temp.setCheck(false);
                }
                adapter.notifyDataSetChanged();
            }
        };


        setListAdapter(adapter);
        //setTitleColor(Color.RED);
        getListView().setOnItemClickListener(il);
        getListView().setChoiceMode(2);



    }
    class Ingadapter extends ArrayAdapter<Ingred>{

        public Ingadapter(Context context, int textViewResourceId,
                List<Ingred> objects) {
            super(context, textViewResourceId, objects);
            // TODO Auto-generated constructor stub
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            LayoutInflater inflater=getLayoutInflater();
            View row = inflater.inflate(R.layout.test, null);
            row.setTag(R.id.text1, row.findViewById(R.id.text1));

            CheckedTextView ctv =(CheckedTextView)row.getTag(R.id.text1);

            Ingred temp = (Ingred)((AdapterView<?>) parent).getItemAtPosition(position);

            if(temp.getCheck()){
                ctv.setChecked(true);   
            }

            ctv.setText(temp.toString());

            return (row);
        } 

    }

    }

Ingred.java

package nu.listfippel.mitt;

public class Ingred {

    private String namn;
    @SuppressWarnings("unused")
    private int volym;
    private double antal;
    private boolean check = false; 
    private String retstring;

    public Ingred(String namn, double antal, int volym, boolean check){
        this.namn = namn;
        this.antal = antal;
        this.volym = volym;
        this.check = check;
    }

    public String toString(){

        if (!this.check){
        retstring = namn + " \n(" + antal + " behövs)";
        }
        else {
            retstring = namn;
        }
        return retstring;
    }

    public boolean getCheck(){
        return this.check;
    }

    public void setCheck(boolean check){
        this.check = check;
    }
}

最佳答案

如果你打算使用setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);,你需要在ListView上使用setSelection()方法来指示要检查哪些,而不是在行绑定(bind)期间自己处理。

关于android - CheckedTextView 设置为在 ListView 中检查oncreate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2354488/

相关文章:

android - 安卓中的图像?

android - 如果选中未知来源,则阻止 .apk 安装

android - OnClick 更改表格行背景颜色

android - 编译错误:The method replace in the type FragmentTransaction is not applicable for the arguments ActionBarSherlock

android - 地点自动完成 Android

java - Android jar文件兼容性linphone

Android动态改变APP主题

android - 运行时异常 : failure delivering result

java - 与 Room 的多对多关系导致错误 : Entities and Pojos must have a usable public constructor

android - 如何防止移动设备在显示 HTML 页面时关闭其显示