OnClickListener In Listview Item Always Takes The Last Row
I download data from server and fill the listview with them. Every item in the listview has 3 buttons, on every button I would like to make an onclicklistener. When the user clicks
Solution 1:
Your are getting last id/ last row position every time because last view reders at last
To get row position on button click you can set postion as tags to your buttons and check that tags in onclickListner
For example in your getview()
method put position as tag in viewHolder.btnMakeComment
button
viewHolder.btnMakeComment.setTag(position);
and in OnClickListner
Check tag
int position = (int)v.getTag();
Solution 2:
Change your adapter:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.law_item, parent, false);
this.convertView = convertView;
viewHolder = new ViewHolder();
viewHolder.tvName = (TextView) convertView.findViewById(R.id.lawItemName);
viewHolder.tvDescription = (TextView) convertView.findViewById(R.id.lawItemDescription);
viewHolder.tvStatus = (TextView) convertView.findViewById(R.id.lawItemStatus);
viewHolder.btnDownvote = (Button) convertView.findViewById(R.id.lawItemDownvote);
viewHolder.btnUpvote = (Button) convertView.findViewById(R.id.lawItemUpvote);
viewHolder.btnMakeComment = (Button) convertView.findViewById(R.id.lawItemMakeComment);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
Log.d("View holder", "get tag");
}
viewHolder.currentLaw = getItem(position);
Log.d("View holder", "new one");
Log.d("LAW ID, ADAPTER", String.valueOf(viewHolder.currentLaw.getId()));
viewHolder.tvName.setText(viewHolder.currentLaw.getName());
viewHolder.tvDescription.setText(viewHolder.currentLaw.getDescription());
viewHolder.tvStatus.setText(viewHolder.currentLaw.getStateValue());
setSurfacesColors();
viewHolder.btnMakeComment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//position -> get id
//action
}
})
viewHolder.btnDownvote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//position -> get id
//action
}
});
viewHolder.btnUpvote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//position -> get id
//action
}
});
disableIfVoted();
return convertView;
}
Solution 3:
try this bt i am not sure:
ArrayList<String> Ex=new ArrayList<String>();
for (int i = 0 ; i<youriDvalue.length; i++)
{
Ex.add(currentVerse_speak.get(i));
//(or)
String []ex1;
ex1=currentVerse_speak.get(i)+"~";
exi[i]=currentVerse_speak.get(i).toString();
}
txtview.settext(Ex.toString());
txtview.settext(ex1.tosting());
Post a Comment for "OnClickListener In Listview Item Always Takes The Last Row"