0

I am trying to edit content in listview but when clicked to update some item, others position update also. This data are saved on SQLite database. Please see below my adapter

public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);

    txtId = (TextView) v.findViewById(R.id.txtId);       
    txtValue = (TextView) v.findViewById(R.id.txtValue);
    ckb = (CheckBox) v.findViewById(R.id.ckbEnable);
    btnUpdate = (Button) v.findViewById(R.id.btnUpdate);


    final String id = list.get(position).get("id").toString();       
    final String value= list.get(position).get("value").toString();
    boolean bval = list.get(position).get("enbl").toString().equals("true") ? true : false;


    txtId.setText(id);
    txtValue.setText(value);
    ckb.setChecked(bval);

    btnUpdate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            control = new DataControl(context);
            cal = new DataCal();
            cal.setId(id);               
            cal.setValue(txtValue.getText().toString());
            cal.setEnable(String.valueOf(ckb.isChecked()));
            int ctrl = control.editCal(cal);
            if (ctrl > 0)
                MessageBox("Success on updating");
            else
                MessageBox("Error while updating!");
        }
    });

    return v;
user1801745
  • 391
  • 2
  • 18

1 Answers1

1

Try to use "ViewHolder" class within your Adapter, I hope it will resolve all your issues. Something like that:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;



import java.util.ArrayList;

import de.hdodenhof.circleimageview.CircleImageView;

 /**
 * Created by Zohaib Hassan on 11/28/2016.
 */

 public class InboxAdapter extends ArrayAdapter<InboxRow> {

 ArrayList<InboxRow> items;
 Context context;


 public InboxAdapter(Context context, int resource, ArrayList<InboxRow> items) {
super(context , resource , items);
this.context = context;
this.items = items;

}



@Override

public View getView(int position, View convertView, ViewGroup parent) {

// Get the data item for this position

InboxRow rowItem = getItem(position);

// Check if an existing view is being reused, otherwise inflate the view

ViewHolder viewHolder; // view lookup cache stored in tag

if (convertView == null) {

    viewHolder = new ViewHolder();

    LayoutInflater inflater = LayoutInflater.from(context);

    convertView = inflater.inflate(R.layout.inbox_row, null);

    viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_user_name_inbox);
    viewHolder.tvMessage = (TextView) convertView.findViewById(R.id.tv_message_inbox);
    viewHolder.tvTimeCount = (TextView) convertView.findViewById(R.id.tv_time_count_inbox);
    viewHolder.userProfilePic = (CircleImageView) convertView.findViewById(R.id.inbox_profile_image);

    convertView.setTag(viewHolder);

} else {

    viewHolder = (ViewHolder) convertView.getTag();

}


// Set Your data here!
/*CircleImageView ivProfileImage Set Background with Picasso*/

return convertView;

}

private static class ViewHolder {

TextView tvUserName , tvMessage , tvTimeCount;
CircleImageView userProfilePic;

}

}
Zohaib Hassan
  • 984
  • 2
  • 7
  • 11