我创建了一个列表视图,其中包含两个TextView
和一个自定义视图作为选择指标,用于加载我正在使用CursorAdapter
并覆盖bindView
和newView
的数据。但问题在于保留选择指数。
当我点击列表项时,我将其位置保存到视图中,如下所示
View v1=(View)view.findViewById(R.id.viewColor);
v1.setTag(position)
但在bindView
内部我没有得到一个位置,我可以通过从视图的标签中获取位置来执行匹配,如下所示
Integer position = (Integer) v1.getTag();
但我没有能够比较我们进入getView
的方式。我试过cur.getPosition()是光标中与v1.getTag()不匹配的记录的位置。
我尝试按如下方式覆盖getView,但没有获得准确的位置
@Override
public View getView(final int position, View convertView, ViewGroup parent){
this.position = position;
return super.getView(position, convertView, parent);
}
那我怎么能在bindView中获得这个位置呢?我需要使用getView还是什么?我探索了许多线程,但在bindView方面我没有得到任何明确的答案。
修改
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
long arg3) {
view.setTag(position);
// i save the position on list item click so that when adapter loads the
// the list i can match the position with the current one
}
答案 0 :(得分:2)
首先,您需要覆盖getView()
并在此处设置位置,然后在bindview()
中访问它。
@Override
public View getView(int position, View convertview, ViewGroup arg2) {
if (convbertview == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertview = inflater.inflate(R.layout.your layout,
null);
}
convertview.setTag(position);
return super.getView(position, convbertview, arg2);
}
并在bindView()
中获得您的位置
@Override
public void bindView(View view, Context context, Cursor cursor) {
int position=(Integer) view.getTag();//here is the position
}
答案 1 :(得分:2)
因为您使用CursorAdapter,所以不要覆盖getView。您可以在bindView中注册onClickListener。假设您正在聆听点击图标,那么您确实喜欢这样:
@Override
public void bindView(View vw, Context ctx, final Cursor cursor) {
/*
* do your binding
*/
ImageView icon = (ImageView) vw.findViewById(R.id.your_icon);
icon.setTag(cursor.getPosition());
icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// here you pass right position to your activity
((MainActivity) context).onIconClick((int)v.getTag());
}
});
}
在您的活动中:
public void onIconClick(int position) {
// do your stuff
}
答案 2 :(得分:0)
更改你的onItemClick,如下所示
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mAdapter.setId(id);
//Set the selector here
}
然后在适配器中维护一个id变量并为其编写setter和getter。然后更改bindView()方法,如下所示
@Override
public void bindView(View view, Context context, Cursor cursor) {
long tempId = cursor.getLong(cursor.getColumnIndex("_id"));
if(tempId==id){
//Set the selector color here
}
else{
//Set the default color here
}
//Remaing your logic here
}
这样就不需要覆盖getView()方法了。
如果要选择多个视图,则必须维护ID的ArrayList ...
答案 3 :(得分:0)
在“ bindView”方法内部,但在“ onClickListener()”之外:
final int position = cursor.getPosition();
在“ onClickListener()”内部:
cursor.moveToPosition(position); //retrieve any data you want after this
祝你好运〜