为什么我的列表视图总是从列表中删除最后一个视图



我正在将值添加到数组和适配器中,当我删除特定项目表单列表视图时,它会完美地从 arraylist 中删除,但它删除最后一个视图是它的意思,如果我有

a
b
c
d
e

当我删除 b ....E视图消失了为什么...那么列表是

a
b
c
d

我从上周开始解决这个问题,但我找不到这个帮助我的错误。 请 请 请 请

public class Home extends AppCompatActivity {
Button addMoreBtn,checkoutBtn;
MedicineBean medicineBean;
//CustomAdapter customAdapter;
ArrayList<MedicineBean> medOrderList;
//<MedicineBean> medOrderList1;
MyDBHandler db;
ListView listView;
int cust_id;
EditText med_nameET, med_potencyET, med_qtyET;
ImageButton increaseQty,decreaseQty;
HomeListViewHandler homeListViewHandler;
private ArrayAdapter<MedicineBean> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
String session_exp = SessionUtil.getSessionExpire(Home.this);
if(Constants.LOGGING)
Toast.makeText(getApplicationContext(),"Session Exp = "+session_exp+" Today Date "+new DateAndTimeUtil().getCurrentDate(),Toast.LENGTH_LONG).show();
//30 days session expire checker
if(session_exp.matches(new DateAndTimeUtil().getCurrentDate())){
SessionUtil.setSignout(Home.this);
Toast.makeText(getApplicationContext(),"Session has been expired due to 30 days limit exceeded",Toast.LENGTH_LONG).show();
Intent intent = new Intent(Home.this, SignIn.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
//first check, Is user LOGGED IN  or not
else if(SessionUtil.isLoggedIn(Home.this)) {
Toolbar toolBar = (Toolbar) findViewById(R.id.easymed_toolbar);
setSupportActionBar(toolBar);
toolBar.setTitle(getResources().getString(R.string.home));
DrawerUtil.getDrawer(this, toolBar);
addMoreBtn      = (Button) findViewById(R.id.addtoList);
checkoutBtn     = (Button) findViewById(R.id.checkOutBtn);
listView        = (ListView) findViewById(R.id.medListView);
med_nameET      = (EditText) findViewById(R.id.frstSingleItemET);
med_potencyET   = (EditText) findViewById(R.id.scndSingleItemET);
med_qtyET       = (EditText) findViewById(R.id.thrdSingleItemTV);
increaseQty=(ImageButton) findViewById(R.id.increaceImgBtn);
decreaseQty=(ImageButton) findViewById(R.id.decreaseImgBtn) ;
medOrderList    = new ArrayList<MedicineBean>();
//medOrderList1    = new ArrayList<MedicineBean>();
cust_id         = SessionUtil.getCustomerId(Home.this);
medicineBean    = new MedicineBean();
db              = new MyDBHandler(Home.this);
//customAdapter   = new CustomAdapter();
adapter=new CustomAdapter(this,0,medOrderList);
listView.setAdapter(adapter);

increaseQty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Constants.LOGGING)
System.out.println("Increment Btn pressed");
int val = Integer.parseInt(med_qtyET  .getText().toString());
val=val+1;
String str = Integer.toString(val);
med_qtyET  .setText(str);
}
});
decreaseQty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int val = Integer.parseInt(med_qtyET  .getText().toString());
if(val>0) {
val = val-1;
String str = Integer.toString(val);
med_qtyET.setText(str);
}
}
});
checkoutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//add new medicines in local DB
int count = 0;
for (int i = 0; i < medOrderList.size(); i++) {
String name             = medOrderList.get(i).getMediceneName();
String potency=medOrderList.get(i).getMedicenePotency();
String qty = medOrderList.get(i).getMediceneQty();
if (!name.matches("") && !potency.matches("") && !qty.matches("")) {
//Check if medicine with same potency available in DB then quantity of medicine add
Cursor cursor = db.getMedByNameAndPotency(cust_id,name,potency);
if(cursor.getCount()>0)
{
cursor.moveToNext();
String qtyInDB      = cursor.getString(0);
int qtyInDBInt      = Integer.parseInt(qtyInDB);
int getQtyFromET    = Integer.parseInt(qtyInDB);
int resultOfSumQty  = getQtyFromET  +   qtyInDBInt;
db.updateMedQTY(cust_id,name,potency,resultOfSumQty);
}
//add new medicine
else if (db.addUsersMed(cust_id, name, potency, qty) != -1) {
medicineBean.setCust_id(cust_id);
medicineBean.setMediceneName(name);
medicineBean.setMedicenePotency(potency);
medicineBean.setMediceneQty(qty);
medOrderList.set(i, medicineBean);
//Log.i(Constants.TAG,medOrderList.get(i).toString());
count++;
}
}
}
if (count > 0) {
Toast.makeText(getApplicationContext(), "Medicines added successfully.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Medicines not added into cart.", Toast.LENGTH_SHORT).show();
}
Intent intent = new Intent(Home.this, Cart.class);
startActivity(intent);
}
});
addMoreBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

if (!med_nameET.getText().toString().matches("") && !med_potencyET.getText().toString().matches("")
&& !med_qtyET.getText().toString().matches("0")) {
medOrderList.add(new MedicineBean(cust_id,med_nameET.getText().toString(),med_potencyET.getText().toString(),med_qtyET.getText().toString()));
med_nameET.setText("");
med_potencyET.setText("");
med_qtyET.setText("0");
adapter.notifyDataSetChanged();
Log.d("data",String.valueOf(medOrderList.size()));
}
else
{
Toast.makeText(getApplicationContext(), "Please fill all empty fields then press 'Add More' button", Toast.LENGTH_SHORT).show();
}
}
});
}
else
{
Intent intent = new Intent(Home.this, SignIn.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}

}






private class ListViewHolder{
EditText medET;
EditText potencyET;
EditText incrOrDecET;
ImageButton cancelBtn;

}
class CustomAdapter extends ArrayAdapter<MedicineBean> {
private Context context;
private List<MedicineBean> medicineBeanList;
ListViewHolder listViewHolder;
public CustomAdapter(Context context, int resource, ArrayList<MedicineBean> objects) {
super(context, resource, objects);
this.context = context;
this.medicineBeanList = objects;
}
@Override
public int getCount() {
return medicineBeanList.size();
}
@Override
public MedicineBean getItem(int i) {
return medicineBeanList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {

if(view==null) {
view = getLayoutInflater().inflate(R.layout.single_item, null);
listViewHolder = new ListViewHolder();
listViewHolder.medET = (EditText) view.findViewById(R.id.mediceNameInHomeList);
listViewHolder.potencyET = (EditText) view.findViewById(R.id.medicePotencyInHomeList);
listViewHolder.incrOrDecET = (EditText) view.findViewById(R.id.mediceQtyInHomeList);
listViewHolder.cancelBtn = (ImageButton) findViewById(R.id.homeCnclBtn);
listViewHolder.medET.setEnabled(false);
listViewHolder.potencyET.setEnabled(false);
listViewHolder.incrOrDecET.setEnabled(false);
view.setTag(listViewHolder);

listViewHolder.medET.setText(medicineBeanList.get(i).getMediceneName());
listViewHolder.potencyET.setText(medicineBeanList.get(i).getMedicenePotency());
listViewHolder.incrOrDecET.setText(medicineBeanList.get(i).getMediceneQty());
listViewHolder.cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {

adapter.remove(medicineBeanList.get(i));
adapter.notifyDataSetChanged();
/*for (int pos = 0; pos < medOrderList.size(); pos++)
{
listViewHolder.medET.setText(medOrderList.get(pos).getMediceneName());
listViewHolder.potencyET.setText(medOrderList.get(pos).getMedicenePotency());
listViewHolder.incrOrDecET.setText(medOrderList.get(pos).getMediceneQty());
//adapter.add(new MedicineBean(medOrderList.get(pos).getCust_id(),medOrderList.get(pos).getMediceneName(),medOrderList.get(pos).getMedicenePotency(),medOrderList.get(pos).getMediceneQty()));
}*/
} catch (Exception e) {
e.printStackTrace();
}

}
});
}
return view;
}
}

}

只是 用以下代码替换适配器代码并阅读我在此代码中提到的注释

class CustomAdapter extends ArrayAdapter<MedicineBean> {
private Context context;
private List<MedicineBean> medicineBeanList;
ListViewHolder listViewHolder;
public CustomAdapter(Context context, int resource, ArrayList<MedicineBean> objects) {
super(context, resource, objects);
this.context = context;
this.medicineBeanList = objects;
}
@Override
public int getCount() {
return medicineBeanList.size();
}
@Override
public MedicineBean getItem(int i) {
return medicineBeanList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {

if(view==null) {
view = getLayoutInflater().inflate(R.layout.single_item, null);
listViewHolder = new ListViewHolder();
listViewHolder.medET = (EditText) view.findViewById(R.id.mediceNameInHomeList);
listViewHolder.potencyET = (EditText) view.findViewById(R.id.medicePotencyInHomeList);
listViewHolder.incrOrDecET = (EditText) view.findViewById(R.id.mediceQtyInHomeList);
listViewHolder.cancelBtn = (ImageButton) findViewById(R.id.homeCnclBtn);
listViewHolder.medET.setEnabled(false);
listViewHolder.potencyET.setEnabled(false);
listViewHolder.incrOrDecET.setEnabled(false);
view.setTag(listViewHolder);
//Add this line 
listViewHolder.cancelBtn.setTag(i);
listViewHolder.medET.setText(medicineBeanList.get(i).getMediceneName());
listViewHolder.potencyET.setText(medicineBeanList.get(i).getMedicenePotency());
listViewHolder.incrOrDecET.setText(medicineBeanList.get(i).getMediceneQty());
listViewHolder.cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
//add this line
int selectedPos = (int) v.getTag();
//Replace this 
//adapter.remove(medicineBeanList.get(i));
//with this
adapter.remove(medicineBeanList.get(selectedPos));
adapter.notifyDataSetChanged();
/*for (int pos = 0; pos < medOrderList.size(); pos++)
{
listViewHolder.medET.setText(medOrderList.get(pos).getMediceneName());
listViewHolder.potencyET.setText(medOrderList.get(pos).getMedicenePotency());
listViewHolder.incrOrDecET.setText(medOrderList.get(pos).getMediceneQty());
//adapter.add(new MedicineBean(medOrderList.get(pos).getCust_id(),medOrderList.get(pos).getMediceneName(),medOrderList.get(pos).getMedicenePotency(),medOrderList.get(pos).getMediceneQty()));
}*/
} catch (Exception e) {
e.printStackTrace();
}

}
});
}
return view;
}
}

}

从列表中删除值,然后刷新适配器。

listViewHolder.cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
String item = medicineBeanList.get(i);
medicineBeanList.remove(position);
adapter.notifyDataSetChanged();}
catch (Exception e) {
e.printStackTrace();
}
}
});

我无法从任何事情中解决,然后我决定在项目删除列表视图时引用平均值,而 referresh 平均值列表视图不可见,然后使用一组新适配器可见。 当我删除列表视图项目时,该项目仅从视图中的数组中完美删除。 那是我在删除后引用列表视图的时候. 喜欢这个。

listView.setVisibility(ListView.VISIBLE);
adapter = new CustomAdapter(this,0,medOrderList);
listView.setAdapter(adapter);

最新更新