2016-11-16 97 views
0

我已經創建了自定義ListView適配器。在getView中,我有另一種覆蓋方法onClick。我的問題是如何知道ListView中的哪個按鈕被點擊了?如何知道在ListView中單擊了哪個按鈕

item_category

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/specialCatItemName" 
     android:textColor="#000" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <Button 
     android:text="View" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btnSpecialView" 
     android:textAllCaps="false" 
     android:padding="3dp" 
     android:background="#CCBA56" 
     android:textColor="#fff" 
     android:minHeight="40dp" 
     android:layout_alignBaseline="@+id/btnSpecialImages" 
     android:layout_alignBottom="@+id/btnSpecialImages" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginBottom="15dp"/> 

    <Button 
     android:text="Images" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btnSpecialImages" 
     android:textAllCaps="false" 
     android:paddingTop="2dp" 
     android:paddingRight="2dp" 
     android:paddingBottom="2dp" 
     android:paddingLeft="2dp" 
     android:background="#011E4D" 
     android:textColor="#fff" 
     android:minHeight="40dp" 
     android:layout_marginTop="11dp" 
     android:layout_below="@+id/specialCatItemName" 
     android:layout_toRightOf="@+id/btnSpecialView" 
     android:layout_toEndOf="@+id/btnSpecialView" 
     android:layout_marginLeft="10dp" 
     android:layout_marginStart="10dp" 
     android:layout_marginBottom="15dp"/> 

</RelativeLayout> 

光標適配器

class categoryCursorAdaptor extends BaseAdapter { 

    Context context; 
    String[] data; 
    private static LayoutInflater inflater = null; 
    int gPosition; 
    String row; 

    public categoryCursorAdaptor(Context context, String[] data) { 
     this.context = context; 
     this.data = data; 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return data.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return data[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     this.gPosition = position; 
     this.row = data[position]; 
     if (vi == null) vi = inflater.inflate(R.layout.item_category, null); 
     TextView text = (TextView) vi.findViewById(R.id.specialCatItemName); 
     text.setText(data[position]); 

     Button Button1= (Button) vi.findViewById(R.id.btnSpecialView); 
     Button1.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       //How do I know which button is got clicked? 
      } 
     }); 
     return vi; 
    } 
} 
+1

第一個。 Button1 var你已經從一個ID爲btnSpecialView的視圖的引用。如果你想要兩個按鈕,你需要使用2個變量。添加:'按鈕Button2 =(按鈕)vi.findViewById(R.id。btnSpecialImages);'所以你可以訪問第二個按鈕點擊 –

+1

位置變量告訴你發生點擊的項目編號。 – rhari

回答

1

@Devil Raily您可以使用setTag和getTag方法來獲取位置。使用這樣的代碼

Button Button1= (Button) vi.findViewById(R.id.btnSpecialView); 
Button1.setTag(position); 
Button1.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       //How do I know which button is got clicked? 
       int position = (Integer)view.getTag(); 
      } 
     }); 
1
Button Button1= (Button) vi.findViewById(R.id.btnSpecialView); 
Button1.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 

     if(gPosition ==1){ 
       // btn 2 was clicked 
     } 
     else if(gPosition ==2){ 
      // btn 3 was clicked 
     } 
      // and so on 

     } 
    }); 

音符從0

1

是位置值開始也許你可以實現查看的OnClickListner您的活動......上點擊的方法覆蓋。

Button b1= (Button) findViewById(R.id.button1); 
b1.setOnClickListener(this); 

全碼本:

public class MainActivity extends Activity implements OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b1= (Button) findViewById(R.id.button1); 
    Button b2= (Button) findViewById(R.id.button2); 
    Button b3= (Button) findViewById(R.id.button3); 
    b1.setOnClickListener(this); 
    b2.setOnClickListener(this); 
    b3.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
    case R.id.button1 : 
     Toast.makeText(MainActivity.this,"button1", 1000).show(); 
     break; 
    case R.id.button2 : 
     Toast.makeText(MainActivity.this,"button2", 1000).show(); 
     break; 
    case R.id.button3 : 
     Toast.makeText(MainActivity.this,"button3", 1000).show(); 
     break; 


    } 

} 
} 
+1

你能否更清楚地解釋一下你在那裏做什麼? :) – mike510a

+0

當然,我是@Overriding的onCreate()和onClick()方法,所以我可以得到(onClick()方法)完全按鈕被它的ID點擊。 唯一我做的不同的是使用吐司告訴我哪個按鈕被點擊。夠清楚了嗎?的xD –

1

更換

Button1.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      //How do I know which button is got clicked? 
     } 
    }); 

有:

Button1.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      //How do I know which button is got clicked? 
      onMyButtonClicked(position, view); 
     } 
    }); 

和實施

void onMyButtonClicked(int position, View view){ 
    //DoStuff 
} 
0

當您設置您的適配器時,您需要在您的活動中實施點擊。像這樣:

adapter = new categoryCursorAdaptor(yourListBase, this); 
listView.setAdapter(adapter); 

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      adapter.getItem(position); // return the object from the position of your list 

     } 
    }); 
0

//我如何知道哪個按鈕被點擊?

添加以下內容:

INT clickedButton = view.getId();

開關(clickedButton){

case R.id.btnSpecialView : 

     // btnSpecialView is clicked - Do something break; 

     break; 

    case R.id.btnSpecialImages : 

     // btnSpecialImages is clicked - Do something break; 

     break; 

}

相關問題