好吧我一直在撕掉我的頭髮過去幾個小時在這裏試圖找出爲什麼我的自定義列表視圖適配器無法正常使用OnItemClickListener。我有一個TextView,我使用DrawableLeft屬性在ListView內部的textview的左側繪製圖像。現在在我的textview中,我將android:focusable和android:focusableInTouchMode以及android:clickable all都設置爲false,並且在我的listview的根目錄中,我將android:descendantFocusability設置爲blocksDescendants,因爲這些是遇到此確切問題時的常見問題。現在,這裏是佈局文件,我會用:ListView自定義OnItemClickListener不被調用
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#363636"
android:dividerHeight="1dp"
android:divider="@drawable/menudivider"
android:paddingLeft="@dimen/list_padding"
android:paddingRight="@dimen/list_padding"
android:descendantFocusability="blocksDescendants" />
這是我的TextView佈局:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#fff"
android:typeface="sans"
android:textSize="20sp"
android:drawablePadding="10dp"
android:padding="7dp"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false" />
我設置DrawableLeft圖像編程在我的派生BaseAdapter類我getView函數中。至於說我實現它的OnItemClickListener功能活動去有點像這樣:
public class ActivityBase extends Activity implements OnItemClickListener {
private ListView mSlidinglist = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSlidinglist = (ListView)findViewById(R.id.menu);
ArrayList<MenuItem> items = new ArrayList<MenuItem>();
items.add(new MenuItem("Test",R.drawable.test));
CustomAdapter adapter = new CustomAdapter(this,items);
mSlidinglist.setAdapter(adapter);
mSlidinglist.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(this, "Clicked", Toast.LENGTH_LONG).show();
}
}
這裏是我的自定義適配器:
public class CustomAdapter extends BaseAdapter
{
private ArrayList<MenuItem> items;
private Context mContext;
public CustomAdapter(Context context, ArrayList<MenuItem> items)
{
this.items = items;
this.mContext = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if(v == null) {
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_row, null);
}
final MenuItem l = items.get(position);
if(l != null) {
TextView title = (TextView) v.findViewById(R.id.menu_list);
title.setText(l.getTitle());
title.setCompoundDrawablesWithIntrinsicBounds(l.getImageId(), 0, 0, 0);
}
return v;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
MenuItem類是剛setters和getters爲我需要的字段...
我不能得到這個開火,我不明白爲什麼任何幫助表示讚賞如果需要更多的代碼只是讓我k現在只是不想發佈一切。 BaseAdapter的子類非常簡單,只需使用setCompoundDrawablesWithIntrinsicBounds設置TextView和DrawableLeft字段的文本。如果有人可以幫助,將不勝感激。
你爲什麼要添加的android:點擊=你的textview爲false? –
您是否嘗試過調試代碼並檢查問題? – GrIsHu
@Puru甚至不關心,如果我啓用它,所以讓它禁用 –