2013-10-21 161 views
0

我很好奇如何最好地處理按鈕點擊,在一個ListFragment與一個自定義適配器內。如何處理按鈕點擊ListFragment

我有一個onClickListener設置的按鈕,但我需要能夠得到它被點擊的項目,因爲它是在一個項目內,這裏是getView內部的自定義適配器。

*/ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view; 

     if (convertView == null) { 
      view = _inflater.inflate(R.layout.test_single_item, parent, false); 
     } else { 
      view = convertView; 
     } 

     TestItemModel item = getItem(position); 
     ((TextView) view.findViewById(R.id.item_label)).setText(item.getName()); 
     ((TextView) view.findViewById(R.id.item_id)).setText(item.getId()); 
     ImageView image = (ImageView) view.findViewById(R.id.image_id); 
     Resources resources = this.getContext().getResources(); 
     image.setImageDrawable(resources.getDrawable(R.drawable.ic_launcher)); 
     Button btn = (Button) view.findViewById(R.id.button_id); 
     Button btn2 = (Button) view.findViewById(R.id.button_id_2); 
     Button btn3 = (Button) view.findViewById(R.id.button_id_3); 
     ol = new OnItemClickListener(position); 
     btn.setOnClickListener(ol); 
     btn.setTag(1); 
     btn2.setOnClickListener(ol); 
     btn2.setTag(2); 
     btn3.setOnClickListener(ol); 
     btn3.setTag(3); 

     return view; 
    } 

,你可以看到我使用的標籤,以確定哪個按鈕被點擊和OnItemClickListener知道哪裏的位置是在其被調用的位置。

我不知道最好的方法,以及如何正確地做到這一點。

+0

爲什麼不使用在'onClick'一個開關殼體?? – Raghunandan

+0

無法獲取被點擊的項目。並且還需要點擊的位置才能知道它被點擊了哪個項目。 – thekevshow

+0

我可以看不到它的問題 – Raghunandan

回答

2

使用開關殼體如下

private OnClickListener mClickListener = new OnClickListener() { 

      public void onClick(View v) { 
       switch(v.getId()) 
       { 
       case R.id.button_id : 
        // btn clicked 
          Toast.makeText(context," Button1 clicked at positon"+v.getTag(), Toast.LENGTH_SHORT).show(); 
        break; 
       case R.id.button_id2 : 
        // btn2 clicked 
          Toast.makeText(context," Button2 clicked at positon"+v.getTag(), Toast.LENGTH_SHORT).show(); 
        break; 
       case R.id.button_id3 : 
          Toast.makeText(context," Button3 clicked at positon"+v.getTag(), Toast.LENGTH_SHORT).show(); 
        // btn 3 clciked 
        break; 
       } 

      } 
     }; 

使用示例的

btn.setOnClickListener(mClickListener); 
btn.setTag(position); 
btn2.setOnClickListener(mClickListener); 
btn2.setTag(position); 
btn3.setOnClickListener(mClickListener); 
btn3.setTag(position); 

管理單元具有兩個按鈕

按鈕1的卡扣點擊在位置0,即第一行

enter image description here

按扣2的點擊位置1處即第二行

enter image description here

+0

除了提供具體的項目,最終的作品,我想出了我的問題。 我把它放在那裏解決我的問題。 ol = new OnItemClickListener(position,item); 添加項目到我使用的OnItemClickListener,我的問題是,這是否阻止良好的模型視圖分離?並在這裏產生影響,因爲最終數據庫交易將在這些按鈕點擊上執行,下線 – thekevshow

+0

@ kev2316確實嘗試了上面的工作,您在問題中沒有提到的問題 – Raghunandan

+0

最初我的問題是已經如何將與點擊的按鈕相關聯的項目傳遞給監聽器來執行那些我已經解決的操作,因爲你正在做的事情我很抱歉,但現在我對你的問題是,這是不是高效並遵循適當的模型視圖分離。 – thekevshow