2016-11-16 98 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; 

}

相关问题