【问题标题】:How get position of child inside listview?如何在列表视图中获取孩子的位置?
【发布时间】:2023-03-25 20:42:01
【问题描述】:

在下面的代码中,如何获取Button被点击按钮的位置?

public class HistoryAdapter extends CursorAdapter {
Button button;
TextView text;

public HistoryAdapter(Context context, Cursor c, int flags) {
    super(context, c, flags);
}

@Override
public View newView(final Context context, Cursor cursor, ViewGroup parent) {
    View view = LayoutInflater.from(context).inflate(R.layout.historylist, parent, false);
    return view;
}

@Override
public void bindView(View view, final Context context, final Cursor cursor) {
    text = (TextView) view.findViewById(R.id.text);
    button = (Button) view.findViewById(R.id.btn);
    String body = cursor.getString(cursor.getColumnIndex("name"));
    text.setText(body);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

}

}

【问题讨论】:

    标签: android listview view


    【解决方案1】:

    以下代码应该可以工作(final 很重要):

        @Override
    public void bindView(View view, final Context context, final Cursor cursor) {
        text = (TextView) view.findViewById(R.id.text);
        button = (Button) view.findViewById(R.id.btn);
        String body = cursor.getString(cursor.getColumnIndex("name"));
        final int position = cursor.getPosition();
        text.setText(body);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doSomething(position);
            }
        });
    

    【讨论】:

    • 为什么final在这里很重要?
    • final 必须使用 onClickListener 中的值,当它被创建时,监听器认为该值不会改变。
    【解决方案2】:

    如果需要item在列表中的位置,可以从传递给onClick方法的View中获取,参考this link可以编辑代码做:

    @Override
    public void bindView(View view, final Context context, final Cursor cursor) {
        text = (TextView) view.findViewById(R.id.text);
        button = (Button) view.findViewById(R.id.btn);
        String body = cursor.getString(cursor.getColumnIndex("name"));
        text.setText(body);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position=(Integer)v.getTag();
            }
        });
    }
    

    希望它有效:)

    【讨论】:

    • 此 CursorAdapter 用于列表视图,如果单击,我想获取按钮在列表视图中的位置
    • 虽然链接可以回答问题,但不建议发布它们。从您认为可以解决问题的链接中发布相关代码并添加链接作为参考。将来,链接可能会被修改或替换,从而使答案完全无关紧要。此外,某些链接并非所有人都可以访问。
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多