2

我有一个使用 aCheckedTextView并从 a 扩展的适配器SimpleCursorAdapter。我试图加载默认值,CheckTextView但我没能做到。我不知道这是我的行为CheckedTextView还是我做错了什么。

我试过什么?

我试图覆盖该getView()方法并获取CheckedTextView视图并使用setChecked(boolean),失败,奇怪的是它不起作用。

然后我尝试使用 a ViewBinder,但这也不起作用。

对这个问题有任何见解吗?

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
            public boolean setViewValue(View view, Cursor cursor,
                    int columnIndex) {
                CheckedTextView cb = (CheckedTextView) view;
                int checked=cursor.getInt(cursor.getColumnIndex(ProgramSurvey.CHECKED));
                cb.setChecked(checked==1);

                return false;
            }
        });
4

4 回答 4

4

如果从 getView 返回的 View 是 CheckedTextView(或任何其他实现 Checkable 的视图),则 listView 将根据它认为选择了哪些行(来自对 setItemChecked 的调用)对相关行设置检查。您需要告诉 ListView 哪些行被检查,而不是尝试自己设置它,或者将您的视图包装在一个不实现可检查的视图中,然后您就可以在 CheckedTextView 中自己设置检查。

于 2011-11-18T02:30:35.287 回答
2

你可以试试这个:

listview.setItemChecked(position,true);
于 2012-08-13T07:58:34.453 回答
0

它实际上帮助了@superfell 的想法,但由于我的活页夹依赖于光标,我不得不重新查询甚至从 ListView 中单击,就像这样

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterlist, View view,
                    int pos, long id) {

                CheckedTextView checkBox = (CheckedTextView) view
                        .findViewById(R.id.checkTextProgram);
                CursorWrapper cursor = (CursorWrapper) adapterlist
                        .getItemAtPosition(pos);

                if (checkBox.isChecked()) {
                    String programId = cursor.getString(cursor
                            .getColumnIndex(Program._ID));
                    getActivity().getContentResolver().delete(
                            ProgramSurvey.buildUri(_ID),
                            ProgramSurvey.PROGRAM_ID + "=?",
                            new String[] { programId });
                } else {
                    ContentValues values = new ContentValues();
                    values.put(ProgramSurvey.PROGRAM_ID, cursor
                            .getString(cursor.getColumnIndex(Program._ID)));
                    values.put(ProgramSurvey.SURVEY_ID, _ID);
                    getActivity().getContentResolver().insert(
                            ProgramSurvey.CONTENT_URI, values);
                }

                getLoaderManager().restartLoader(0, null, ProgramDialogFragment.this);

            }

        });

所以我使用加载器管理器按需重新查询游标。

于 2011-11-18T04:01:23.890 回答
0

我只是试图膨胀布局(android.R.layout.simple_list_item_multiple_choice)......它提供了简单的修改复选框图像和文本视图颜色和填充。它类似于checkedTextview。

适配器类:

public class CustomListAdapter extends BaseAdapter {

    private String[] stringArray;
    private Context mContext;
    private LayoutInflater inflator;
    int checkbox;
    /**
     * 
     * @param context
     * @param stringArray
     */
    public CustomListAdapter(Context  context, String[] stringArray) 
    {
        this.mContext=context;
        this.stringArray=stringArray;
        this.inflator= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount()
    {
        return stringArray.length;
    }

    @Override
    public Object getItem(int position)
    {
        return position;
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {

        final MainListHolder mHolder;
        View v = convertView;
        if (convertView == null)
        {
            mHolder = new MainListHolder();
            v = inflator.inflate(android.R.layout.simple_list_item_multiple_choice, null);
            mHolder.txt=(CheckedTextView) v.findViewById(android.R.id.text1);
            v.setTag(mHolder);
        } 
        else
        {
            mHolder = (MainListHolder) v.getTag();
        }
        mHolder.txt.setText(stringArray[position]);
        mHolder.txt.setTextSize(12);
        mHolder.txt.setTextColor(Color.YELLOW);

    /**
     * When checkbox image is set By setImageFromResourceCheckBox(int id) method...Otherwise it takes default
     */
        if(checkbox!=0)
            mHolder.txt.setCheckMarkDrawable(R.drawable.android_button);

        mHolder.txt.setPadding(5, 5, 5, 5);
        return v;
    }
    class MainListHolder 
    {
        private CheckedTextView txt;

    }
    /***
     * Setting Image for Checkbox
     * @param id
     * 
     */
    public void setImageFromResourceCheckBox(int id)
    {
        this.checkbox=id;
    }


}

主要活动:

public class CheckedListActivity extends ListActivity implements OnItemClickListener  {

    //final String[] str={"Android","Black Berry","Iphone","Ipad"};
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        CustomListAdapter c=new CustomListAdapter(this,GENRES);
        c.setImageFromResourceCheckBox(R.drawable.android_button);
        setListAdapter(c);

        final ListView listView = getListView();
        listView.setItemsCanFocus(false);
        //listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// For single mOde

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

        //used for default selection .....
        listView.setItemChecked(2, true);
        listView.setOnItemClickListener(this);
    }


    private static final String[] GENRES = new String[] 
                                                {
        "Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
        "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
    };
    @Override
    public void onItemClick(AdapterView<?> adapter, View arg1, int arg2, long arg3)
    {

    SparseBooleanArray sp=getListView().getCheckedItemPositions();

    String str="";
    for(int i=0;i<sp.size();i++)
    {
        str+=GENRES[sp.keyAt(i)]+",";
    }
    Toast.makeText(this, ""+str, Toast.LENGTH_SHORT).show();

    }
}
于 2011-11-18T05:42:38.920 回答