Android GridView按钮点击处理程序
我有一个安卓Android GridView按钮点击处理程序,android,android-gridview,Android,Android Gridview,我有一个安卓GridView,有一个ImageView,TextView和两个按钮。网格看起来很好,但我发现在GridView中处理按钮事件很困难。我是Android新手 任何帮助都将不胜感激 谢谢。您必须使用McClickListener gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v,
GridView
,有一个ImageView
,TextView
和两个按钮。网格看起来很好,但我发现在GridView
中处理按钮事件很困难。我是Android新手
任何帮助都将不胜感激
谢谢。您必须使用McClickListener
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position,
long row) {
}
gridview.setOnItemClickListener(新的OnItemClickListener(){
公共控件单击(AdapterView父对象、视图v、内部位置、,
(长行){
}
位置应该告诉您单击的元素。
但我认为gridview在使用ClickListener(如按钮)处理对象时存在问题。可能最好将gridview更改为其他容器。如果需要gridview,可以在屏幕中使用setOnTouchListener作为捕捉位置,并创建手动onitemclicklistener。如果需要按钮(以及其他任何内容)要在布局中具有唯一的单击操作,需要编写自定义适配器并覆盖getView()
:
(这假设您的布局没有任何嵌套的视图组,因此进行相应的调整。)或者设置OnClick listener Inner adapter,然后按中的说明进行相同的单击
内部适配器
holder.okay_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((GridView)parent).performItemClick(v,position,0);
}
});
holder.cancel_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((GridView)parent).performItemClick(v,position,0);
}
});
在java文件中
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch(view.getId)
{
case R.id.okay_button:
//do your stuff
break;
case R.id.cancel_button:
//do your stuff
break;
}
});
gridView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
开关(view.getId)
{
案例R.id.OK_按钮:
//做你的事
打破
案例R.id.取消按钮:
//做你的事
打破
}
});
注意:如果您正在使用多个子项click listener,请使用开关大小写检查在SetOnItemClickListener中单击了哪个项。因为使用if-else会触发适配器中的所有click listener。如果有任何解决方案,请告诉我。谢谢。如果您发布代码,您将得到质量更好的响应谢谢你的回答。我正试图在点击GridView内的按钮时设置GridView内的TextView列的文本。我无法获取TextView的引用。我正在添加适配器的getView代码。我添加了一个示例,从一个孩子那里引用ViewHolder中的任何其他布局。如果这有帮助,请告诉我。Thanks Sam。这真的很有帮助!我的GridView的OnItemClick事件没有触发。这是因为GridView中的按钮吗?是的。一个视图中的onClick侦听器会使用该事件,阻止它到达任何其他视图…如果要同时调用这两个视图,可以将mGridView.performClick()
添加到按钮的onClick()
(显然,mGridView
是一个引用GridView的类变量)。这里记录了ViewHolder对象的好处:这是一个很好的帮助!您链接的博客也很棒,谢谢。
gridView = root.findViewById(R.id.gridview);
CustomAdapter customAdapter = new CustomAdapter();
gridView.setAdapter(customAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
{
if(view.getId() == R.id.buyButton) {
Intent intent = new Intent(getActivity(), OrderSummary.class);
intent.putExtra("name", canWaterName[i]);
intent.putExtra("price", canWaterPrice[i]);
intent.putExtra("image", canWaterImage[i]);
startActivity(intent);
}
}
});
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch(view.getId)
{
case R.id.okay_button:
//do your stuff
break;
case R.id.cancel_button:
//do your stuff
break;
}
});
gridView = root.findViewById(R.id.gridview);
CustomAdapter customAdapter = new CustomAdapter();
gridView.setAdapter(customAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
{
if(view.getId() == R.id.buyButton) {
Intent intent = new Intent(getActivity(), OrderSummary.class);
intent.putExtra("name", canWaterName[i]);
intent.putExtra("price", canWaterPrice[i]);
intent.putExtra("image", canWaterImage[i]);
startActivity(intent);
}
}
});
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View view1 = getLayoutInflater().inflate(R.layout.row_data,null);
//getting view in row_data
final TextView name = view1.findViewById(R.id.canwaterName);
final TextView price = view1.findViewById(R.id.canwaterPrice);
final ImageView image = view1.findViewById(R.id.images);
name.setText(canWaterName[position]);
price.setText(canWaterPrice[position]);
image.setImageResource(canWaterImage[position]);
final Button buy = view1.findViewById(R.id.buyButton);
buy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((GridView)parent).performItemClick(v,position,0);
}
});
return view1;
}