点击后,我从Listview获得了错误的值。
流量:
a)一旦Spinner选择使用Asynctask帮助改变Listview值,我就有了一个Spinner。
OnPostMethod Asynctask方法,用于在Listview中加载项目
protected void onPostExecute(List<MIC_OrderDetails> lst) {
dialog.setMessage("Inflating Data...");
if (lst.get(lst.size() - 1).getResult().contains(("success"))) {
ordList.addAll(lst);
ordList.notifyDataSetChanged();
dialog.dismiss();
/*
* ordList = new MicListAdapter(InventoryCount.this, lst);
* lstView.setAdapter(ordList);
*
* dialog.dismiss();
*/
} else {
dialog.dismiss();
toastText.setText("Problem in loading Items");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 410);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(toastLayout);
toast.show();
}
}
在我的适配器MicListAdapter中我创建了addAll()方法,因为直接调用对我不起作用
public void addAll(List<MIC_OrderDetails> lst) {
this.alllst.clear();
this.alllst.addAll(lst);
this.notifyDataSetChanged();
}
b)单击Listview,值对应于我的自定义对话框中没有的值,即
假设我的微调器包含两个值(1&amp; 2)。默认情况下,第一次1将在Spinner中显示,当我将其更改为2时,Listview值会受到影响,对应于“2”,但是当我点击时在Listview上我得到的值属于“1”。
以下是Listview onclick
的代码段 lstView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
MIC_OrderDetails list_obj = new MIC_OrderDetails();
list_obj = (MIC_OrderDetails) lstView
.getItemAtPosition(position);
ItemNo = list_obj.getItemNumber();
Desc = list_obj.getItemDescription();
PickSeq = list_obj.getPickSeq();
StockUnit = list_obj.getUnit();
qtyonHand = list_obj.getQtyonHand();// This value gives
// QOHand
qtyCount = list_obj.getQtyCount();
loc = mspinner.getItemAtPosition(
mspinner.getSelectedItemPosition()).toString();
medtItem.setText(ItemNo);
medtdesc.setText(Desc);
qtyCount = supporter.getCurrencyFormat(Double
.parseDouble(qtyCount));
medtQtyCount.setText(qtyCount);
medtuom.setText(StockUnit);
medtQtyCountTotal.setText(qtyCount);
.....
});
这是我的完整适配器类。
public class MicListAdapter extends ArrayAdapter<MIC_OrderDetails> implements
Filterable {
List<MIC_OrderDetails> alllst;
List<MIC_OrderDetails> list;
List<MIC_OrderDetails> filterlst;
// = new ArrayList<MIC_OrderDetails>();
Context context;
TextView txtitem;
TextView txtdesc;
TextView txtpick;
TextView txtQtyonHand;
TextView txtQtyCounted;
TextView txtuom;
/* TextView txtstatus; */
private ModelFilter filter;
@Override
public Filter getFilter() {
if (filter == null) {
filter = new ModelFilter();
}
return filter;
}
public MicListAdapter(Context context, List<MIC_OrderDetails> value) {
// TODO Auto-generated constructor stub
super(context, R.layout.six_textview, value);
this.context = context;
this.list = value;
this.alllst = new ArrayList<MIC_OrderDetails>(list);
this.filterlst = new ArrayList<MIC_OrderDetails>(alllst);
getFilter();
}
public void addAll(List<MIC_OrderDetails> lst) {
this.alllst.clear();
this.alllst.addAll(lst);
this.notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return alllst.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
View view = null;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.six_textview, parent, false);
txtitem = (TextView) convertView.findViewById(R.id.txt_fullItemNo);
txtdesc = (TextView) convertView.findViewById(R.id.txt_fullDesc);
txtpick = (TextView) convertView.findViewById(R.id.txt_fullLoc);
txtQtyonHand = (TextView) convertView
.findViewById(R.id.txt_fullord);
txtQtyCounted = (TextView) convertView
.findViewById(R.id.txt_fullrecqty);
txtuom = (TextView) convertView.findViewById(R.id.txt_fullUom);
convertView.setTag(new OrdersViewHolder(txtitem, txtdesc, txtpick,
txtQtyonHand, txtQtyCounted, txtuom));
} else {
OrdersViewHolder viewHolder = (OrdersViewHolder) convertView
.getTag();
}
OrdersViewHolder holder = (OrdersViewHolder) convertView.getTag();
holder.txtitem.setText(alllst.get(position).getItemNumber());
holder.txtdesc.setText(alllst.get(position).getItemDescription());
holder.txtpick.setText(alllst.get(position).getPickSeq());
holder.txtQtyonHand.setText((alllst.get(position).getQtyonHand()));
/*
* String o=(lst.get(position).getQtyShiped()).toString(); String
* u=lst.get(position).getUom();
*/
holder.txtQtyCounted.setText((alllst.get(position).getQtyCount()));
holder.txtuom.setText(alllst.get(position).getUnit());
/* holder.txtstatus.setText(alllst.get(position).getStatus()); */
return convertView;
}
/** Holds child views for one row. */
static class OrdersViewHolder {
TextView txtitem;
TextView txtdesc;
TextView txtpick;
TextView txtQtyonHand;
TextView txtQtyCounted;
TextView txtuom;
/* TextView txtstatus; */
public OrdersViewHolder(TextView txtitem, TextView txtdesc,
TextView txtpick, TextView txtQtyonHand,
TextView txtQtyCounted, TextView txtuom) {
// TODO Auto-generated constructor stub
this.txtitem = txtitem;
this.txtdesc = txtdesc;
this.txtpick = txtpick;
this.txtQtyonHand = txtQtyonHand;
this.txtQtyCounted = txtQtyCounted;
this.txtuom = txtuom;
/* this.txtstatus=txtstatus; */
}
任何人都可以告诉我为什么会出现这种情况......提前致谢
答案 0 :(得分:1)
而不是使用lstView
使用arg0
这是onItemClick
方法的第一个参数来获取点击的项目值:
list_obj = (MIC_OrderDetails)arg0.getAdapter().getItem(position);
OR
使用lst
列表对象:
list_obj = lst.get(position);
但需要将lst
声明为全局变量,以便在扩展Asynctask