gpt4 book ai didi

android - 自定义 cursoradapter 位置错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:15 27 4
gpt4 key购买 nike

当我点击 call_btn 按钮时,它显示错误的位置!

像这张图片是我的 ListView :

(红色数字是错误的)

enter image description here

public class MyAdapter extends CursorAdapter
{
Context b;

LayoutInflater inflater;
@SuppressWarnings("deprecation")
public MyAdapter(Context context, Cursor c) {
super(context, c);
inflater = LayoutInflater.from(context);
b= (Context) context;
}

@Override
public void bindView(View view, Context context, final Cursor cursor) {
// TODO Auto-generated method stub
TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);

tv1.setText(cursor.getString(2));
tv2.setText(cursor.getString(3));


final Button call_btn= (Button)view.findViewById(R.id.call_btn);

call_btn.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {

Toast.makeText(b, cursor.getString(1), Toast.LENGTH_SHORT).show();

}});


}

protected Context getActivity() {
// TODO Auto-generated method stub
return null;
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.item, parent, false);
}
}

我以前见过这些问题:

Wrong position in Custom Adapter

custom cursor adapter wrong position

最佳答案

A Cursor只是来自数据库的结果集,带有指向当前行的位置指针。当您滚动列表并根据光标数据填充新行时,此位置指针会自动为您移动在幕后。

所以当bindView()为列表中的每一行调用,位置设置正确,这就是为什么你的 TextViews 有正确的文本,但是当 call_btn.onClick()被调用时,我们不知道光标的当前位置是什么,也绝对不能保证它指向与 onClickListener 时相同的位置。在 bindView() 时被实例化被调用了。

解决方案非常简单。尝试更换您的 bindView()下面这个编辑版本的方法,它明确地保存位置,然后使用它来将光标移动到 onClick() 中的右行方法:

@Override
public void bindView(View view, Context context, final Cursor cursor) {
// TODO Auto-generated method stub
TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);

tv1.setText(cursor.getString(2));
tv2.setText(cursor.getString(3));


final Button call_btn= (Button)view.findViewById(R.id.call_btn);
final int position = cursor.getPosition();

call_btn.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {

cursor.moveToPosition(position);
Toast.makeText(b, cursor.getString(1), Toast.LENGTH_SHORT).show();

}});


}

关于android - 自定义 cursoradapter 位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com