我有一个使用CheckedTextView
的适配器,并从SimpleCursorAdapter
延伸。我试图加载CheckTextView
的默认值,但我没有设法做到这一点。我不知道这是CheckedTextView
的行为还是我做错了。
我尝试了什么?
我尝试覆盖getView()
方法并获取CheckedTextView
视图并使用setChecked(boolean)
,FAILED,奇怪的是它不起作用。
然后我尝试使用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;
}
});
答案 0 :(得分:4)
如果从getView返回的View是CheckedTextView(或任何其他实现Checkable的视图),那么listView将根据它认为选择的行(从调用setItemChecked)设置相关行的选中。您需要告诉ListView检查哪些行,而不是尝试自己设置它,或者将视图包装在一个不实现可检查的视图中,然后您就可以在CheckedTextView中自行设置检查。
答案 1 :(得分:2)
你可以试试这个:
listview.setItemChecked(position,true);
答案 2 :(得分:0)
它实际上帮助了来自@superfell的想法,但由于我的绑定器依赖于Cursor,我不得不重新查询ClickView甚至来自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);
}
});
所以我使用了loader manager来根据需要重新查询游标。
答案 3 :(得分:0)
我只是试图扩充布局(android.R.layout.simple_list_item_multiple_choice)...它只提供了修改后的复选框图像和textview颜色以及padding.It类似于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();
}
}