我知道有很多类似的问题,但我没有找到适合我的解决方案。我有一个类似于这个的listview布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/layout_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:singleLine="true" />
</LinearLayout>
</RelativeLayout>
在我的listview适配器中,我有下一个getView
方法:
@Override
public View getView(int arg0, View convertView, ViewGroup arg2) {
if (convertView == null) {
mHolder = new Holder();
convertView = mInflater.inflate(R.layout.item_list_1, null);
mHolder.firstLayout = (LinearLayout) convertView.findViewById(R.id.layout_main);
mHolder.text1 = (TextView) convertView.findViewById(R.id.text1);
convertView.setTag(mHolder);
}
mHolder = (Holder) convertView.getTag();
mHolder.text1.setText("text");
mHolder.firstLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
android.util.Log.e("TAG", "mHolder.firstLayout onClick");
}
});
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
android.util.Log.e("TAG", "convertView onClick");
}
});
return convertView;
}
mHolder.firstLayout.setOnClickListener
和convertView.setOnClickListener
不起作用,但是:
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
android.util.Log.e("TAG", "mListView onClick");
}
});
它有效,但我需要完全监听我的listview项目。
我知道问题是焦点,因为在getView中使用requestFocus()
侦听器工作,但这不是一个好的解决方案。
It works good for 2.3 but doesn't work for 1.5, I need to get it working exactly for 1.5
答案 0 :(得分:0)
没有理由为getView()中的每个项目设置侦听器。
可能会产生更多问题。保持简单并设置Listener just for the ListView in your onCreate()
更改您的getView()
:
@Override
public View getView(int arg0, View convertView, ViewGroup arg2) {
if (convertView == null) {
mHolder = new Holder();
convertView = mInflater.inflate(R.layout.item_list_1, null);
mHolder.firstLayout = (LinearLayout) convertView.findViewById(R.id.layout_main);
mHolder.text1 = (TextView) convertView.findViewById(R.id.text1);
convertView.setTag(mHolder);
}
mHolder = (Holder) convertView.getTag();
mHolder.text1.setText("text");
return convertView;
}
这可以解决您的问题。