【问题标题】:Buttons in listview do not fire onclick event列表视图中的按钮不会触发 onclick 事件
【发布时间】:2014-11-04 01:19:59
【问题描述】:

listview 中的按钮不会触发 onclick 事件,但如果我单击该行就会触发。

我在fragment 中有一个列表视图。列表视图中的每一行都有 2 个buttons 和一个textview。问题是,如果我点击 textview 事件会被触发,但如果我点击按钮,事件不会被触发。我的数据适配器中只有字符串,因为我正在处理 files,这就是文件名。按钮将是对文件的操作。

这是适配器(我没有数据适配器的类,我必须吗?)

public class fileExplorerAdapter extends ArrayAdapter<String> {
        private ArrayList<String> items;

        public fileExplorerAdapter(Context context, int textViewResourceId, ArrayList<String> items) {
                super(context, textViewResourceId, items);
                this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                if (v == null) {
                    LayoutInflater vi = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.file_explorer_cell, null);
                }
                String fileName = items.get(position);
                TextView tt = (TextView) v.findViewById(R.id.txtViewFileName);
                tt.setText(fileName);

                return v;
        }
}

这是片段中事件的设置

// ListView Item Click Listener
listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Log.d("debug", "in item clicked");

            // ListView Clicked item index
            int itemPosition = position;

            // ListView Clicked item value
            String itemValue = (String) listView
                    .getItemAtPosition(position);

            // Show Alert
            Toast.makeText(
                    rootView.getContext(),
                    "Position :" + itemPosition + "  ListItem : "
                            + itemValue, Toast.LENGTH_LONG).show();

        }

    });

【问题讨论】:

  • 您的按钮代码在哪里?它不会使用该代码触发与按钮相关的任何内容。
  • 你能给我看看你的xml吗?
  • checkTHIS,也许你会得到一些帮助。

标签: android android-listview


【解决方案1】:

您需要为您的TextView 和您的Buttons 创建单独的View.OnClickListener

如果你有一个 OnItemClickListener,那么只有整个项目视图会响应点击事件。

所以你应该这样做:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.file_explorer_cell, null);
    }
    String fileName = items.get(position);

    // hook up text view
    TextView tt = (TextView) v.findViewById(R.id.txtViewFileName);
    tt.setOnClickListener(textview_onclick);         

    // hook up button one
    Button button1 = (Button) v.findViewById(R.id.button1);
    button.setOnClickListener(button_onclick);

    // hook up button two
    Button button2 = (Button) v.findViewById(R.id.button2);
    button.setOnClickListener(button_onclick2);

    tt.setText(fileName);

    return v;
}

并删除 OnItemClickListener。

附带说明,当 convertView 为空时,您应该为每行中的各个小部件设置侦听器。 IE。只需在首次创建时设置它们即可。

【讨论】:

    【解决方案2】:

    我在您的代码中没有看到任何按钮。除了列表中的项目(在您的情况下为文本视图)之外,甚至没有事件监听器。从这个角度来看,您提供的代码完全符合您的要求。

    【讨论】:

      【解决方案3】:

      请阅读android编程的基础知识。

      onItemClick 监听器响应列表行的点击事件,而不是按钮。

      首先在getView方法中指定按钮监听。您的代码中没有按钮的事件侦听器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多