2014-06-05 51 views
2

即時通訊使用onItemClick,我得到正確的行並能夠做我需要的東西(我的目標是添加一個視圖到該項目 但是,按鈕點擊事件不會返回正確的單元格,而是列表中的隨機其他單元格,下面是我的代碼中的一個示例:使用遊標適配器中的點擊事件

public class CustumAdapter extends CursorAdapter implements OnClickListener{ 

private Context context; 

private Button btn_maybe; 

private String name; 

public CustumAdapter(Context context, Cursor c, LatLng position) { 
    super(context, c); 

    this.position = position; 
    this.context = context; 

} 

@Override 
public void bindView(View view, final Context context, Cursor c) { 

    name = c.getString(c.getColumnIndex(ContractPlaces.PLACE_NAME)); 
    btn_maybe = (Button) view.findViewById(R.id.cursor_layout_maybe); 
    btn_maybe.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      //i need to use the correct view from BindView here 

     } 
    }); 



    nameView.setText(name); 
在此示例代碼,我想在小區中的按鈕,點擊讓

我accsses在按鈕確實是,但是我回來從隨機列表中的小區的觀點來看,我怎樣才能得到正確的單元格INF o在我的點擊監聽器中?

編輯:

所以感謝@darnmason我想通了,爲了得到使用光標適配器click事件的列表項的看法,有問題,這將是一個光標標籤設置按鈕。爲getPosition(),所以標籤位於項目的正確位置,在ListView生命週期的真諦,如果我想在一個特定位置的項目的視圖我會打電話給

//where lv is the ListView (you can pass it to the adapter as a parameter). 
//getChildAt returns a view in a position 
//value is the value of cursor.getPosition() so its the correct position of the item where //the button was clicked. 
//lv.getFirstVisiblePosition() is the first position that is actually on screen, 
    View view = lv.getChildAt(value - lv.getFirstVisiblePosition()); 

當你扣除此從實際的位置你得到你需要的位置,不要忘記添加

if(view == null) 
       return; 

避免免除。

回答

3

name在類被聲明並覆蓋每個敬酒時間bindView被執行,當你點擊按鈕時,Toast中顯示的是最近被綁定的視圖。

我喜歡的模式是將可點擊視圖的索引存儲在其標籤中。然後在onClick中,您從視圖中獲取索引,並從適配器獲取該索引的數據。

+0

我的問題是在onClickListener我只得到按鈕的視圖,我需要像bindView中的整個單元格的視圖 –

+0

我的意思是在bindView的按鈕上設置標籤,所以在onClick你從標籤獲得索引 – darnmason

+0

是!那工作!非常感謝! –

1

您可以使用setTaggetTag

btn_maybe.setTag(name); 

然後在onClick

String value = (String) v.getTag(); 

使用值顯示

Toast.makeText(context, value, Toast.LENGTH_SHORT).show(); 
+0

對不起,我是不是更具體,但字符串「name」只是一個例子,我真的需要風景。 –

+0

@ZivKesten你在說什麼看法。 – Raghunandan

+0

我在當時正在工作的單元格的視圖,從bindView查看 –

0

您可以創建自己的類,它農具onClickListener並提供對象 構造:

private static MyOnClickListener implements OnClickListener { 
     Context mContext; 
     String mName; 
     public MyOnClickListener(Context context, String name) { 
      mContext = context; 
      mName = name; 
     } 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(mContext, mName, Toast.LENGTH_SHORT).show(); 
     } 
} 

@Override 
public void bindView(View view, final Context context, Cursor c) { 

    name = c.getString(c.getColumnIndex(ContractPlaces.PLACE_NAME)); 
    btn_maybe = (Button) view.findViewById(R.id.cursor_layout_maybe); 
    btn_maybe.setOnClickListener(new MyOnClickListener(context, name));