Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在通过onClickListener调用ListView项onItemClick_Java_Android - Fatal编程技术网

Java 正在通过onClickListener调用ListView项onItemClick

Java 正在通过onClickListener调用ListView项onItemClick,java,android,Java,Android,在我的列表中,我有一些项目里面有一个按钮,当前每当我尝试单击按钮时,它也会触发单击。下面的代码在getView中 holder.btnAdd.setTag(tg); holder.btnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int id = v.getId();

在我的列表中,我有一些项目里面有一个按钮,当前每当我尝试单击按钮时,它也会触发单击。下面的代码在getView中

holder.btnAdd.setTag(tg);       
    holder.btnAdd.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            int id = v.getId();
            Toast.makeText(getParent().getActivity(), "clicked this button",Toast.LENGTH_LONG).show();
    });
这是onItemClick,它位于适配器外部

HorizontalListView hlv = (HorizontalListView) view
            .findViewById(R.id.gallery);

    GalleryAdapter ga = new GalleryAdapter(offerItemDetailsFragment,
            result);
    ga.setListView(hlv);
    hlv.setAdapter(ga);
    hlv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
             RelatedOffer relOffer = (RelatedOffer) parent.getAdapter().getItem(position);
            ...
        }
    });
horizontalistView hlv=(horizontalistView)视图
.findviewbyd(R.id.gallery);
GalleryAdapter ga=新GalleryAdapter,
结果);
ga.setListView(hlv);
hlv.setAdapter(ga);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
RelatedOffer relOffer=(RelatedOffer)parent.getAdapter().getItem(位置);
...
}
});

如果您的列表中有按钮,请尝试检索按钮的id,并使用与按钮相关的单击侦听器,或者如果您有自定义适配器,请在自定义适配器中为按钮编写侦听器

请访问希望它能帮助您

假设你有你的持有人如下

static class UserHolder {
  TextView textName;
  TextView textAddress;
  TextView textLocation;
  Button btnEdit;
  Button btnDelete;
 }
@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  View row = convertView;
  UserHolder holder = null;

  if (row == null) {
   LayoutInflater inflater = ((Activity) context).getLayoutInflater();
   row = inflater.inflate(layoutResourceId, parent, false);
   holder = new UserHolder();
   holder.textName = (TextView) row.findViewById(R.id.textView1);
   holder.textAddress = (TextView) row.findViewById(R.id.textView2);
   holder.textLocation = (TextView) row.findViewById(R.id.textView3);
   holder.btnEdit = (Button) row.findViewById(R.id.button1);
   holder.btnDelete = (Button) row.findViewById(R.id.button2);
   row.setTag(holder);
  } else {
   holder = (UserHolder) row.getTag();
  }
  User user = data.get(position);
  holder.textName.setText(user.getName());
  holder.textAddress.setText(user.getAddress());
  holder.textLocation.setText(user.getLocation());
  holder.btnEdit.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.i("Edit Button Clicked", "**********");
    Toast.makeText(context, "Edit button Clicked",
      Toast.LENGTH_LONG).show();
   }
  });
  holder.btnDelete.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.i("Delete Button Clicked", "**********");
    Toast.makeText(context, "Delete button Clicked",
      Toast.LENGTH_LONG).show();
   }
  });
  return row;

 }
关于这一点,请尝试按如下方式编写getView

static class UserHolder {
  TextView textName;
  TextView textAddress;
  TextView textLocation;
  Button btnEdit;
  Button btnDelete;
 }
@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  View row = convertView;
  UserHolder holder = null;

  if (row == null) {
   LayoutInflater inflater = ((Activity) context).getLayoutInflater();
   row = inflater.inflate(layoutResourceId, parent, false);
   holder = new UserHolder();
   holder.textName = (TextView) row.findViewById(R.id.textView1);
   holder.textAddress = (TextView) row.findViewById(R.id.textView2);
   holder.textLocation = (TextView) row.findViewById(R.id.textView3);
   holder.btnEdit = (Button) row.findViewById(R.id.button1);
   holder.btnDelete = (Button) row.findViewById(R.id.button2);
   row.setTag(holder);
  } else {
   holder = (UserHolder) row.getTag();
  }
  User user = data.get(position);
  holder.textName.setText(user.getName());
  holder.textAddress.setText(user.getAddress());
  holder.textLocation.setText(user.getLocation());
  holder.btnEdit.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.i("Edit Button Clicked", "**********");
    Toast.makeText(context, "Edit button Clicked",
      Toast.LENGTH_LONG).show();
   }
  });
  holder.btnDelete.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.i("Delete Button Clicked", "**********");
    Toast.makeText(context, "Delete button Clicked",
      Toast.LENGTH_LONG).show();
   }
  });
  return row;

 }
因此您的自定义适配器可以看起来像

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class UserCustomAdapter extends ArrayAdapter<User> {
 Context context;
 int layoutResourceId;
 ArrayList<User> data = new ArrayList<User>();

 public UserCustomAdapter(Context context, int layoutResourceId,
   ArrayList<User> data) {
  super(context, layoutResourceId, data);
  this.layoutResourceId = layoutResourceId;
  this.context = context;
  this.data = data;
 }

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

  if (row == null) {
   LayoutInflater inflater = ((Activity) context).getLayoutInflater();
   row = inflater.inflate(layoutResourceId, parent, false);
   holder = new UserHolder();
   holder.textName = (TextView) row.findViewById(R.id.textView1);
   holder.textAddress = (TextView) row.findViewById(R.id.textView2);
   holder.textLocation = (TextView) row.findViewById(R.id.textView3);
   holder.btnEdit = (Button) row.findViewById(R.id.button1);
   holder.btnDelete = (Button) row.findViewById(R.id.button2);
   row.setTag(holder);
  } else {
   holder = (UserHolder) row.getTag();
  }
  User user = data.get(position);
  holder.textName.setText(user.getName());
  holder.textAddress.setText(user.getAddress());
  holder.textLocation.setText(user.getLocation());
  holder.btnEdit.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.i("Edit Button Clicked", "**********");
    Toast.makeText(context, "Edit button Clicked",
      Toast.LENGTH_LONG).show();
   }
  });
  holder.btnDelete.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Log.i("Delete Button Clicked", "**********");
    Toast.makeText(context, "Delete button Clicked",
      Toast.LENGTH_LONG).show();
   }
  });
  return row;

 }

 static class UserHolder {
  TextView textName;
  TextView textAddress;
  TextView textLocation;
  Button btnEdit;
  Button btnDelete;
 }
}
import java.util.ArrayList;
导入android.app.Activity;
导入android.content.Context;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
公共类UserCustomAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
ArrayList数据=新的ArrayList();
public UserCustomAdapter(上下文上下文,int-layoutResourceId,
ArrayList数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
UserHolder=null;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新用户holder();
holder.textName=(TextView)row.findViewById(R.id.textView1);
holder.textAddress=(TextView)row.findViewById(R.id.textView2);
holder.textLocation=(TextView)row.findViewById(R.id.textView3);
holder.btnEdit=(按钮)行.findViewById(R.id.button1);
holder.btnDelete=(按钮)行.findViewById(R.id.button2);
row.setTag(支架);
}否则{
holder=(UserHolder)row.getTag();
}
User=data.get(位置);
holder.textName.setText(user.getName());
holder.textAddress.setText(user.getAddress());
holder.textLocation.setText(user.getLocation());
holder.btnEdit.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Log.i(“单击编辑按钮”,“*******”);
Toast.makeText(上下文,“单击编辑按钮”,
Toast.LENGTH_LONG).show();
}
});
holder.btnDelete.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Log.i(“单击删除按钮”,“*******”);
Toast.makeText(上下文,“单击删除按钮”,
Toast.LENGTH_LONG).show();
}
});
返回行;
}
静态类用户持有者{
文本视图文本名称;
文本视图文本地址;
文本视图文本位置;
按钮btnEdit;
按钮btnDelete;
}
}

阅读更多信息:

如果列表中包含内部可单击元素,则不能使用
OnItemClickListener
。相反,尝试向行的根布局中添加一个
OnClickListener
,并在那里执行您的项单击逻辑。

我确实为OnClickListener编写了一个匿名内部类,但仍然更新了答案。请访问适配器的根布局?恐怕我以前做过,这就是为什么我把它移到了GetView中我不确定我是否理解你的意思。现在在getView中有两个单击事件。一个用于按钮,另一个用于附加到行布局根视图的行。我知道我没有将其放在那里,因为我正在测试所有的可能性,现在我在适配器中有一个onClick,同时检查要触发的id,该id不适用于匿名
OnClickListeners
。你需要做两个独立的。事件只针对它所附加到的视图触发,因此检查id毫无意义。有趣的是,即使我删除了OnClickListener,并单击了它仍然调用onItemClick事件的按钮。