Java ImageButton单击侦听器不工作
我有我的自定义适配器,因为我有一个Java ImageButton单击侦听器不工作,java,android,Java,Android,我有我的自定义适配器,因为我有一个ImageButton,我想设置onClickListener 问题是,当我单击位置0中的元素时,它返回位置3中的元素;我不明白为什么 这是自定义适配器: public class CustomAdapter extends BaseAdapter { private final Activity context; private LayoutInflater mInflater; private ArrayList<H
ImageButton
,我想设置onClickListener
问题是,当我单击位置0中的元素时,它返回位置3中的元素;我不明白为什么
这是自定义适配器:
public class CustomAdapter extends BaseAdapter {
private final Activity context;
private LayoutInflater mInflater;
private ArrayList<HashMap<String, Object>> mlist;
private String mNome;
private String mCognome;
private String mTitolo;
private String mInfo;
ViewHolder viewHolder;
View view;
ArrayList<Integer> map = new ArrayList<>();
HashMap<String, Object> e;
public CustomAdapter(Activity context,ArrayList<HashMap<String, Object>> mlist){
this.context = context;
this.mlist=mlist;
mInflater = context.getLayoutInflater();
}
public class ViewHolder {
public ImageButton mImageButton;
public TextView mTitleView;
public TextView mNomeView;
public TextView mCognomeView;
public TextView mInfoView;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int position) {
Log.d("POSITION GET",Integer.toString(position));
if (mlist != null && position >= 0 && position < getCount()) {
Log.d("POSITION GET",Integer.toString(position));
return mlist.get(position);
}
return null;
}
@Override
public long getItemId(int position) {
if (mlist != null && position >= 0 && position < getCount()) {
return Integer.parseInt((String)mlist.get(position).get("id"));
}
return position;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
view = convertView;
e = (HashMap<String, Object>) getItem(position);
if (view == null) {
view = mInflater.inflate(R.layout.item_list_avvisi, parent, false);
viewHolder = new ViewHolder();
viewHolder.mImageButton = (ImageButton) view.findViewById(R.id.imageButton);
viewHolder.mCognomeView = (TextView) view.findViewById(R.id.cognome);
viewHolder.mNomeView = (TextView) view.findViewById(R.id.nome);
viewHolder.mTitleView = (TextView) view.findViewById(R.id.titolo);
viewHolder.mInfoView = (TextView) view.findViewById(R.id.info);
viewHolder.mImageButton.setClickable(true);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.mImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nome = e.get("Nome").toString();
Log.d("TAG", nome);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, (String) "Avviso Scuola: " + nome + " " +
mCognome + "\n" +
mTitolo + "\n" +
mInfo
);
shareIntent.setType("text/plain");
context.startActivity(shareIntent);
}
});
viewHolder.mCognomeView.setText(e.get("Cognome").toString());
viewHolder.mNomeView.setText(e.get("Nome").toString());
viewHolder.mTitleView.setText(e.get("Titolo").toString());
viewHolder.mInfoView.setText(e.get("Info").toString());
return view;
}
公共类CustomAdapter扩展了BaseAdapter{
私人最终活动背景;
私人停车场;
私有数组列表;
私有字符串mNome;
私有字符串mCognome;
私有字符串mTitolo;
私有字符串mInfo;
持票人持票人;
视图;
ArrayList映射=新的ArrayList();
哈希映射;
公共CustomAdapter(活动上下文,ArrayList mlist){
this.context=上下文;
this.mlist=mlist;
mInflater=context.getLayoutFlater();
}
公共类视图持有者{
公共图像按钮;
公共文本视图mTitleView;
公共文本视图mNomeView;
公共文本视图mCognomeView;
公共文本视图mInfoView;
}
@凌驾
public int getCount(){
返回mlist.size();
}
@凌驾
公共对象getItem(int位置){
Log.d(“位置获取”,Integer.toString(位置));
如果(mlist!=null&&position>=0&&position=0&&position
在片段中我有:
private ArrayList<HashMap<String, Object>> mlist = new ArrayList<HashMap<String, Object>>();
...
for (int i = 1; i < array.length(); i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
Gson gson = new Gson();
Avv mAvv = gson.fromJson(String.valueOf(array.getJSONObject(i)), Avv.class);
map.put("id", String.valueOf(i));
map.put("Name", mAvv.getNome());
map.put("Surname", mAvv.getCognome());
map.put("Title", mAvv.getTitolo());
map.put("Info", mAvv.getTesto());
mlist.add(map);
}
...
CustomAdapter mAdapter = new CustomAdapter(getActivity(),mlist);
list.setAdapter(mAdapter);
private ArrayList mlist=new ArrayList();
...
对于(int i=1;i
您正在使用从回收的视图中使用的数据。永远不要这样做。而是从ArrayList中获取数据
mlist.get(postion)....
您必须将final
声明添加到该位置,以便在onClick
方法中可以访问该声明
public View getView(final int position,View convertView,ViewGroup parent)
{您可以,但必须将位置设置为final.getView(final int positionHi,问题是位置(我尝试了Log.d(“position”,Integer.toString(position));仅为0-1-2或3..之后返回0,但列表中的元素为4..因此其他元素被删除..您能帮忙吗?)ListView正在循环视图,您将看到当前正在绘制的视图的位置。阅读此嗨,我阅读了,但目前我找不到解决方案..我更新我的问题
mlist.get(postion)....