When checkboxes are checked and text inserted into edittext in listvew they seem to migrate between listitems somewhat randomly both when scrolling and not scrolling.
I have tried to implement holders and other solutions that can be found in the following links but to no avail.
CheckBox in RecyclerView keeps on checking different items
Checking a checkbox in listview makes other random checkboxes checked too
Any and all suggestions on my predicament would be greatly appreciated.
Here is the code from the aforementioned program.
ItemAdapter
public class ItemAdapter extends ArrayAdapter<Item> {
public static boolean isitpopulated;
public static int DrawerInUse;
public static int ListLoc;
public ItemAdapter(Activity context, ArrayList<Item> items) {
super(context, 0, items);
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
// Check if the existing view is being reused, otherwise inflate the view
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item, parent, false);
}
// Get the {@link Item} object located at this position in the list
final Item currentItem = getItem(position);
final Item currentposs = getItem(position);
// Find the TextView in the list_item.xml layout with the ID version_name
TextView itemTextView = (TextView) listItemView.findViewById(R.id.item);
CheckBox check = listItemView.findViewById(R.id.checkbox);
final TextView quantityTextView = (TextView) listItemView.findViewById(R.id.quantity);
String listcontent = quantityTextView.getText().toString();
int drawer = Drawers.DrawerChosen;
// Get the version name from the current object and
// set this text on the name TextView
itemTextView.setText(currentItem.getItem());
TextView infoTextView = (TextView) listItemView.findViewById(R.id.info);
infoTextView.setText(currentItem.getInfo());
TextView doseTextView = (TextView) listItemView.findViewById(R.id.dose);
doseTextView.setText(currentItem.getDose());
TextView typeTextView = (TextView) listItemView.findViewById(R.id.type);
typeTextView.setText(currentItem.getType());
// website with solution
//https://stackoverflow.com/questions/11190390/checking-a-checkbox-in-listview-makes-other-random-checkboxes-checked-too
if (listcontent.isEmpty()) {
quantityTextView.setText(currentItem.getQuantity());
System.out.println("Drawer: "+drawer+" Position: "+position);
if (drawer < 9) {
String Liststatus = ListProcessing.wagon[0][drawer][position][5];
if (Liststatus.equals("true")) {
// make box cheked
CheckBox checktemp = listItemView.findViewById(R.id.checkbox);
checktemp.setChecked(true);
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA: " + ListProcessing.wagon[0][drawer][position][5]);
}
}
if (drawer == 10) {
//String FListstatus = ListProcessing.finalWagon[position][5];
/*
if (FListstatus.equals("true")) {
CheckBox checktemp = listItemView.findViewById(R.id.checkbox);
checktemp.setChecked(true);
System.out.println("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
}
*/
}
// if(listcontent.isEmpty()) {
//final CheckBox check = listItemView.findViewById(R.id.checkbox);
final View listItemView1 = listItemView;
//reset and Populating list
final String itemName = currentposs.getItem();
String itemInfo = currentposs.getInfo();
String itemDose = currentposs.getDose();
String itemQuantity = currentposs.getQuantity();
String itemType = currentposs.getType();
// populateList(position,itemName,itemInfo,itemDose,itemQuantity,itemType);
// when chekbox is ticked then list is amended
check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox = (CheckBox) v;
ListProcessing d = new ListProcessing();
if (checkBox.isChecked()) {
if (Drawers.DrawerChosen <= 10) {
d.wagon[0][Drawers.DrawerChosen][position][5] = "true";
} else if (Drawers.DrawerChosen == 10) {
d.finalWagon[position][5] = "true";
}
} else if (checkBox.isChecked() == false) {
if (Drawers.DrawerChosen < 10) {
d.wagon[0][Drawers.DrawerChosen][position][5] = "false";
} else if (Drawers.DrawerChosen == 10) {
d.finalWagon[position][5] = "false";
}
}
}
});
final TextView quantityTextView1 = (TextView) listItemView1.findViewById(R.id.quantity);
String userinput = quantityTextView1.getText().toString();
listItemView.findViewById(R.id.quantity);
quantityTextView1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// System.out.println("!!!!!!!!!!!!!!!!!!!!!!beforeTextChanged!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//System.out.println("!!!!!!!!!!!!!!!!!!!!!!onTextChanged!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
//@Override
public void afterTextChanged(Editable s) {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!afterTextChanged!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
String numberInserted;
final View listItemView2 = listItemView1;
final TextView quantityTextView2 = (TextView) listItemView2.findViewById(R.id.quantity);
String userinput = quantityTextView2.getText().toString();
//System.out.println("user input: " + userinput + "-------------------------------");
//if (userinput.isEmpty()) {
int drawer = Drawers.DrawerChosen;
//ListProcessing.wagon[0][drawer][position][3] = userinput;
//System.out.println("ListProcessing.wagon[0]["+drawer+"]["+position+"][3]: " + ListProcessing.wagon[0][drawer][position][3] + "-------------------------------");
ListProcessing.ChangeData(drawer, position, userinput);
}
});
}
if (currentItem.isCheckBox()) {
check.setVisibility(View.VISIBLE);
} else {
check.setVisibility(View.GONE);
}
if (currentItem.isInfo()) {
infoTextView.setVisibility(View.VISIBLE);
} else {
infoTextView.setVisibility(View.GONE);
}
if (currentItem.isDose()) {
doseTextView.setVisibility(View.VISIBLE);
} else {
doseTextView.setVisibility(View.GONE);
}
if (currentItem.isQuantity()) {
quantityTextView.setVisibility(View.VISIBLE);
} else {
quantityTextView.setVisibility(View.GONE);
}
return listItemView;
}
}
package com.example.notandi.hospitalwagons;
Item
public class Item {
private String item;
private String info;
private String dose;
private String type;
private int quantity;
private int userQuantity;
private boolean isInfo = false;
private boolean isDose = false;
private boolean isQuantity = false;
private boolean isCheckBox = false;
public int itemChosen;
/**
* @param wItem
*/
public Item(String wItem) {
item = wItem;
isCheckBox = true;
}
/**
* @param wItem is the name of the item/medicine
* @param wQuantity is how many items there should be total
* @param wType ...
*/
public Item(String wItem, int wQuantity, String wType) {
item = wItem;
quantity = wQuantity;
type = wType;
isCheckBox = true;
isQuantity = true;
}
public Item(String wItem, String wInfo, String wDose, int wQuantity, String wType) {
item = wItem;
info = wInfo;
dose = wDose;
quantity = wQuantity;
type = wType;
isCheckBox = true;
isQuantity = true;
isDose = true;
isInfo = true;
}
public String getItem() {
return item;
}
public String getInfo() {
return info;
}
public String getDose() {
return dose;
}
public String getType() {
return type;
}
public String getQuantity() {
return Integer.toString(quantity);
}
public boolean isCheckBox() {
return isCheckBox;
}
public boolean isInfo() {
return isInfo;
}
public boolean isDose() {
return isDose;
}
public boolean isQuantity() {
return isQuantity;
}
public void findViewById (int quantity) {
}
}
One of the many fragments
public class drawer_med_Fragment extends Fragment {
public int[] quantityArr;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.word_list, container, false);
getActivity().setTitle(R.string.medicine_drawer);
ArrayList<Item> items = new ArrayList<Item>();
String[] itemArr = getResources().getStringArray(R.array.medicine_drawer_items);
String[] infoArr = getResources().getStringArray(R.array.medicine_drawer_info);
String[] doseArr = getResources().getStringArray(R.array.medicine_drawer_dose);
String[] typeArr = getResources().getStringArray(R.array.medicine_drawer_type);
int[] quantityArr= new int[26];
for(int i=0;i<26;i++){
int a = Integer.parseInt(ListProcessing.wagon[0][1][i][3]);
quantityArr[i]=a;
}
String item;
String info;
String dose;
String type;
int quantity;
for (int i = 0; i < itemArr.length; i++) {
item = itemArr[i];
info = infoArr[i];
dose = doseArr[i];
quantity = quantityArr[i];
type = typeArr[i];
items.add(new Item(item, info, dose, quantity, type));
}
ItemAdapter adapter = new ItemAdapter(getActivity(), items);
ListView listView = (ListView) rootView.findViewById(R.id.list);
listView.setAdapter(adapter);
return rootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setRetainInstance(true);
}
//public void startlistTop(){
// quantityArr = getResources().getIntArray(R.array.medicine_drawer_quantity);
//}
}