我正在考虑向已经有文本和复选框的ListView中的项添加一个图标:simple_list_item_multiple_choice.xml,它只是一个< CheckedTextView>带有一些属性的标签
我知道自定义适配器解决方案,但我真的想要更直观的解决方案。 我知道玩源代码并不直观,但我的意思是这样做很容易:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, // context
android.R.layout.simple_list_item_multiple_choice, // view for an item in the list
myCursor, // cursor used for populating list items
new String[] {dBHelper.CONTACT_NAME}, // column in cursor we are getting data from
new int[] {android.R.id.text1}); // where to put this data in the item's view
结果可以用这样的结果:
SparseBooleanArray checkedPositions = lv.getCheckedItemPositions();
使用单独文件中的任何代码
我的问题是 eclipse无法解决: R.styleable.CheckedTextView 和 mPaddingRight 在:
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.CheckedTextView, defStyle, 0);
和
Drawable d = a.getDrawable(R.styleable.CheckedTextView_checkMark);
和
boolean checked = a.getBoolean(R.styleable.CheckedTextView_checked, false);
和
mPaddingRight = mCheckMarkWidth + mBasePaddingRight;
d.setState(getDrawableState());
} else {
mPaddingRight = mBasePaddingRight;
}
和
@Override
public void setPadding(int left, int top, int right, int bottom) {
super.setPadding(left, top, right, bottom);
mBasePaddingRight = mPaddingRight;
}
谢谢...... :)
答案 0 :(得分:1)
如上面的评论中所述,如果您只想在ListView项目中添加图标,则无需转到源代码。只需创建一个描述您想要的新布局。我在下面列举了一个例子,但这只是一种方法。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="6dp"
android:paddingRight="6dp">
<ImageView
android:id="@+id/icon1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher" />
<CheckedTextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:layout_toRightOf="@id/icon1"
/>
</RelativeLayout>
然后,在您的活动代码中执行以下操作:
ListView listView = (ListView) findViewById(R.id.listView1);
// I'm just going to use an ArraySdapter, for simplicity...
listView.setAdapter(new ArrayAdapter<String>(this, R.layout.item, android.R.id.text1, getResources().getStringArray(R.array.items)));
// or, for the sake of example (note, not optimized at all)
listView.setAdapter(new ArrayAdapter<String>(this, R.layout.item, android.R.id.text1, getResources().getStringArray(R.array.items)) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (position % 2 == 0) {
((ImageView) view.findViewById(R.id.icon1)).setImageResource(R.drawable.ic_launcher);
} else {
((ImageView) view.findViewById(R.id.icon1)).setImageResource(R.drawable.ic_launcher);
}
return view;
}
});
注意,上面提供了更多的灵活性,但你也可以在CheckedTextView中添加一个android:drawableLeft属性,而不是添加RelativeLayout和ImageView。