2012-11-15 57 views
0

下面是一些一Button是對每一個細胞中的XML我ListView如何獲取ListView單元格中的按鈕被觸摸時的位置?

android:onClick="buttonTouched" 

這就是所謂的對我的ListActivity:

public void buttonTouched(View v) 
{ 
    // how do I get the "position" of the cell this view is on? 
} 

如何獲得的細胞被觸動的按鈕的position

+0

你想要做什麼? –

+0

每個單元格都有三個按鈕,我需要知道點擊了哪個確切的位置,因爲每個按鈕都會做一些獨立的操作。 –

+0

然後你可以得到那個按鈕的ID。我認爲你不應該得到那個位置。 –

回答

0

在適配器試試這個:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    YourWrapper wrapper = null; 

    if (row == null) 
    { 
     row = inflater.inflate(R.layout.layout, parent, false); 
     wrapper = new YourWrapper (row); 
     row.setTag(wrapper); 
    } 
    else 
     wrapper = (YourWrapper) row.getTag(); 

    wrapper.getButton().setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      // What you want 
     } 
    }); 

    return row; 
} 
0

因爲我有在同一行的一些按鈕,最後我只是在我的適配器所需的位置設置標籤,然後讓按鈕標籤摸:

public void imageClick(View v) 
{ 
    int position = (Integer) v.getTag(); 
} 

,因爲我需要有在ListActivity完成的點擊訪問某些數據,我需要有這不是在適配器我去這條路線的原因。

0

請看看這個:OnItemClickListener。實施示例:setOnItemClickListener on custom ListView

由於在列表視圖的每一行中都有3個按鈕,並且您有3個diff執行,所以還有另一種方法。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 

    if(null == convertView){ 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(LAYOUT_RESOURCE, null); 
     holder.btn1 = (Button) convertView.findViewById(R.id.btn1); 
     holder.btn2 = (Button) convertView.findViewById(R.id.btn2); 
     holder.btn3 = (Button) convertView.findViewById(R.id.btn3); 
     //setting tag to reduce hierarchy lookup 
     convertView.setTag(holder); 
    } else { 
     //getting tag to obtain the already found views 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    //Updating fields 
    holder.btn1.setOnClickListener(commonListener); 
    holder.btn2.setOnClickListener(commonListener); 
    holder.btn3.setOnClickListener(commonListener); 
    //returning the populated view 
    return convertView; 
} 

OnClickListener commonListener = new OnClickListener(){ 

    @Override 
     public void onClick(View v) { 
      switch(v.getId()){ 
       case R.id.btn1: 
       //do your work 
       break; 
      case R.id.btn2: 
       //do your work 
       break; 
       case R.id.btn3: 
       //do your work 
       break; 
       default: 
       break; 
      } 
     } 
    }); 
/** 
* Holder class to improve performance. Helps in reducing the lookup for 
* views. 
* 
*/ 
private static class ViewHolder { 

    Button btn1; 
    Button btn2; 
    Button btn3; 
} 

希望這會有所幫助。

相關問題