listview
中的按钮不会触发onclick
事件,但是如果我点击它就行了。
我在fragment
中有一个列表视图。列表视图中的每一行都有2 buttons
和textview
。问题是,如果我单击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();
}
});
答案 0 :(得分:2)
您需要为View.OnClickListener
和TextView
创建单独的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方法中指定按钮侦听器。代码中没有按钮的事件监听器。