Skip to content Skip to sidebar Skip to footer

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"