listview中的按钮不会触发onclick事件

时间:2014-11-04 01:19:59

标签: android android-listview

listview中的按钮不会触发onclick事件,但是如果我点击它就行了。

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

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

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();

        }

    });

3 个答案:

答案 0 :(得分:2)

您需要为View.OnClickListenerTextView创建单独的Button

如果您有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为null时,您应该为每行中的各个小部件设置侦听器。即只需在首次创建它们时进行设置。

答案 1 :(得分:0)

我在代码中看不到任何按钮。除了列表中的项目(在您的情况下是textview)之外,甚至没有eventlistener。从这个角度来看,您提供的代码完全符合您的要求。

答案 2 :(得分:0)

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

onItemClick侦听器响应列表行的click事件,而不是按钮。

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