簡體   English   中英

ListView自定義OnItemClickListener未被調用

[英]ListView Custom OnItemClickListener not being called

好的,在過去的幾個小時中,我一直在梳理頭發,以弄清楚為什么我的自定義列表視圖適配器無法與OnItemClickListener一起正常工作。 我有一個TextView,在其中使用DrawableLeft屬性在ListView內的textview的左側繪制圖像。 現在在我的文本視圖中,我確實將android:focusable和android:focusableInTouchMode以及android:clickable全部設置為false,並且在我的列表視圖的根目錄中,我將android:descendantFocusability設置為blocksDescendants,因為這些是此確切問題經常遇到的問題。 現在這是我要使用的布局文件:

<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" />

我在BaseAdapter派生的類中的getView函數中以編程方式設置了DrawableLeft Image。 至於我在其中實現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類只是我需要的字段的設置方法和獲取方法...

我無法解決這個問題,如果需要更多代碼,我不明白為什么要感謝任何幫助,只是讓我知道只是不想發布所有內容。 BaseAdapter的子類非常簡單,它僅使用setCompoundDrawablesWithIntrinsicBounds設置TextView和DrawableLeft字段的文本。 如果有人可以幫助,將不勝感激。

好的,我剛剛測試了代碼,對其進行了一點編輯,現在可以正常工作了。

我改變了什么:

   if(l != null) {
    TextView title = (TextView) v; // insted of findView

    title.setText(l.getTitle());
    title.setCompoundDrawablesWithIntrinsicBounds(l.getImageId(), 0, 0, 0);
}

嘗試更改活動以擴展ListActivity .. logcat中的錯誤是什么?

奇怪的是,當我刪除了涉及可聚焦性和可點擊性的屬性時,我開始工作了。 我不明白,但是看看是否適合您。

將這些應用於子視圖

android:focusable="false"
android:focusableInTouchMode="false"

將此應用到父布局

android:descendantFocusability="blocksDescendants"

在您的代碼中添加以下兩行:

 mSlidinglist.setClickable(true)
 mSlidinglist.setEnable(true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM