Android 带有edittext和复选框的片段listview中的随机行为
选中复选框并将文本插入listvew中的edittext时,无论是在滚动还是不滚动时,它们似乎在列表项之间随机迁移。Android 带有edittext和复选框的片段listview中的随机行为,android,listview,android-fragments,Android,Listview,Android Fragments,选中复选框并将文本插入listvew中的edittext时,无论是在滚动还是不滚动时,它们似乎在列表项之间随机迁移。 我已经尝试实现了以下链接中可以找到的持有者和其他解决方案,但没有效果 如果您对我的困境有任何建议,我们将不胜感激。 下面是上述程序的代码 项目适配器 public class ItemAdapter extends ArrayAdapter<Item> { public static boolean isitpopulated; public static i
我已经尝试实现了以下链接中可以找到的持有者和其他解决方案,但没有效果
如果您对我的困境有任何建议,我们将不胜感激。
下面是上述程序的代码 项目适配器
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;
众多碎片中的一个
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);
//}
}
public类drawer\u med\u片段扩展片段{
公共int[]数量arr;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.word\u列表,容器,false);
getActivity().setTitle(R.string.medicine_抽屉);
ArrayList items=新建ArrayList();
String[]itemArr=getResources().getStringArray(R.array.medicine\u drawer\u items);
字符串[]infoArr=getResources().getStringArray(R.array.medicine\u drawer\u info);
字符串[]doserr=getResources().getStringArray(R.array.medicine\u drawer\u dose);
字符串[]typeArr=getResources().getStringArray(R.array.medicine\u drawer\u type);
int[]quantityArr=新int[26];
for(int i=0;i适配器中最有可能出现的问题。每个if语句也必须添加else语句。类似于:
if (listcontent.isEmpty()) {
quantityTextView.setText(currentItem.getQuantity());
} else {
quantityTextView.setText("");
}
if (drawer < 9) {
...
} else {
...
}
if(listcontent.isEmpty()){
quantityTextView.setText(currentItem.getQuantity());
}否则{
quantityTextView.setText(“”);
}
如果(抽屉<9){
...
}否则{
...
}
适配器中最有可能出现的问题。每个if语句都必须添加else语句。类似于:
if (listcontent.isEmpty()) {
quantityTextView.setText(currentItem.getQuantity());
} else {
quantityTextView.setText("");
}
if (drawer < 9) {
...
} else {
...
}
if(listcontent.isEmpty()){
quantityTextView.setText(currentItem.getQuantity());
}否则{
quantityTextView.setText(“”);
}
如果(抽屉<9){
...
}否则{
...
}