![](/img/trans.png)
[英]How to get the value of a particular textView inside ListView in Android?
[英]Set textview value in particular row in listview Android
我在listview上有四個textview。 我的看法如下
我想在對話框值的幫助下根據特定項目手動設置數量,我的代碼如下
public class OrderFragment extends Fragment {
Spinner mSpinnerMeal;
OrderAdapter mOrderAdpter;
ArrayList<ParserOrder>mArrayList;
ListView mListView;
TextView mTextViewSubmit;
Dialog mDialog;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mView=inflater.inflate(R.layout.order, container, false);
mSpinnerMeal=(Spinner)mView.findViewById(R.id.order_spn_meal_type);
mArrayList=new ArrayList<ParserOrder>();
StaticValue.noOfFragment=2;
mDialog=new Dialog(getActivity(),android.R.style.Theme_NoTitleBar|android.R.style.Theme_Holo|android.R.style.Theme_Translucent);
mDialog.setCancelable(false);
mListView=(ListView)mView.findViewById(R.id.order_listview);
mTextViewSubmit=(TextView)mView.findViewById(R.id.order_txt_submit);
mTextViewSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
mOrderAdpter=new OrderAdapter();
mListView.setAdapter(mOrderAdpter);
return mView;
}
public class OrderAdapter extends BaseAdapter
{
ArrayList<ParserOrder >mList;
FragmentActivity mActivity;
ViewHolder mViewHolder;
LayoutInflater inflater;
public OrderAdapter() {
// TODO Auto-generated constructor stub
inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return RestaurantApplication.mParserOrder.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@SuppressWarnings("unused")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
mViewHolder=new ViewHolder();
convertView = inflater.inflate(R.layout.row_order, parent, false);
mViewHolder.mTextViewItenam=(TextView)convertView.findViewById(R.id.row_order_iteamname);
mViewHolder.mTextViewPrice=(TextView)convertView.findViewById(R.id.row_order_price);
mViewHolder.mTextViewTotal=(TextView)convertView.findViewById(R.id.row_order_txt_total);
mViewHolder.mTextViewQty=(TextView)convertView.findViewById(R.id.row_order_edt_qty);
mViewHolder.mTextViewItenam.setText(RestaurantApplication.mParserOrder.get(position).getIteamname());
mViewHolder.mTextViewPrice.setText(RestaurantApplication.mParserOrder.get(position).getIteamprice());
mViewHolder.mTextViewQty.setId(position);
mViewHolder.mTextViewQty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.setContentView(R.layout.dialog_qty);
final EditText mEditTextQty=(EditText)mDialog.findViewById(R.id.dialog_edt);
TextView mTextViewOk=(TextView)mDialog.findViewById(R.id.dialog_txt_ok);
TextView mTextViewCancel=(TextView)mDialog.findViewById(R.id.dialog_txt_cancle);
mTextViewOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewHolder.mTextViewQty.setText(mEditTextQty.getText().toString().trim());
mDialog.dismiss();
}
});
mTextViewCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
mDialog.show();
}
});
mViewHolder.mTextViewQty.setTag(position);
if (convertView==null) {
mViewHolder.mTextViewQty.getTag();
}
return convertView;
}
}
public class ViewHolder
{
TextView mTextViewItenam;
TextView mTextViewPrice;
TextView mTextViewQty;
TextView mTextViewTotal;
}
}
現在的問題是,當我運行此代碼並單擊任何數量的textview時,它將僅在textview的最后一次設置值,而當我再次單擊任何textview並嘗試在文本中設置值時,不允許在任何文本框中設置該值我該如何解決這個問題?
編輯代碼
根據您的建議,我將代碼更改如下
public class OrderFragment extends Fragment {
Spinner mSpinnerMeal;
OrderAdapter mOrderAdpter;
ArrayList<ParserOrder>mArrayList;
ListView mListView;
TextView mTextViewSubmit;
Dialog mDialog;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mView=inflater.inflate(R.layout.order, container, false);
mSpinnerMeal=(Spinner)mView.findViewById(R.id.order_spn_meal_type);
mArrayList=new ArrayList<ParserOrder>();
StaticValue.noOfFragment=2;
mDialog=new Dialog(getActivity(),android.R.style.Theme_NoTitleBar|android.R.style.Theme_Holo|android.R.style.Theme_Translucent);
mDialog.setCancelable(false);
mListView=(ListView)mView.findViewById(R.id.order_listview);
mTextViewSubmit=(TextView)mView.findViewById(R.id.order_txt_submit);
mTextViewSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
mOrderAdpter=new OrderAdapter();
mListView.setAdapter(mOrderAdpter);
return mView;
}
public class OrderAdapter extends BaseAdapter
{
ArrayList<ParserOrder >mList;
FragmentActivity mActivity;
ViewHolder mViewHolder;
LayoutInflater inflater;
public OrderAdapter() {
// TODO Auto-generated constructor stub
inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return RestaurantApplication.mParserOrder.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@SuppressWarnings("unused")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
mViewHolder=new ViewHolder();
convertView = inflater.inflate(R.layout.row_order, parent, false);
mViewHolder.mTextViewItenam=(TextView)convertView.findViewById(R.id.row_order_iteamname);
mViewHolder.mTextViewPrice=(TextView)convertView.findViewById(R.id.row_order_price);
mViewHolder.mTextViewTotal=(TextView)convertView.findViewById(R.id.row_order_txt_total);
mViewHolder.mTextViewQty=(TextView)convertView.findViewById(R.id.row_order_edt_qty);
mViewHolder.mTextViewItenam.setText(RestaurantApplication.mParserOrder.get(position).getIteamname());
mViewHolder.mTextViewPrice.setText(RestaurantApplication.mParserOrder.get(position).getIteamprice());
mViewHolder.mTextViewQty.setId(position);
mViewHolder.mTextViewQty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.setContentView(R.layout.dialog_qty);
final EditText mEditTextQty=(EditText)mDialog.findViewById(R.id.dialog_edt);
final TextView mTextViewOk=(TextView)mDialog.findViewById(R.id.dialog_txt_ok);
mTextViewOk.setTag(position);
TextView mTextViewCancel=(TextView)mDialog.findViewById(R.id.dialog_txt_cancle);
mTextViewOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos=Integer.parseInt(mTextViewOk.getTag().toString());
System.out.println("Position "+pos);
mOrder.setIt_id(RestaurantApplication.mParserOrder.get(position).getIt_id());
mOrder.setCid(RestaurantApplication.mParserOrder.get(position).getCid());
mOrder.setIteamname(RestaurantApplication.mParserOrder.get(position).getIteamname());
mOrder.setIteamprice(RestaurantApplication.mParserOrder.get(position).getIteamprice());
mOrder.setSid(RestaurantApplication.mParserOrder.get(position).getSid());
mOrder.setQty(mEditTextQty.getText().toString().trim());
RestaurantApplication.mParserOrder.remove(position);
RestaurantApplication.mParserOrder.add(position,mOrder);
mViewHolder.mTextViewQty.setText(RestaurantApplication.mParserOrder.get(position).getQty());
mDialog.dismiss();
mOrderAdpter.notifyDataSetChanged();
}
});
mTextViewCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
mDialog.show();
}
});
mViewHolder.mTextViewQty.setTag(position);
if (convertView==null) {
mViewHolder.mTextViewQty.getTag();
}
return convertView;
}
}
public class ViewHolder
{
TextView mTextViewItenam;
TextView mTextViewPrice;
TextView mTextViewQty;
TextView mTextViewTotal;
}
}
在編輯的代碼中,當我第一次更改數量時,我可以正常工作,但是當我更改任何其他項目數量時,它更改了所有其他值,它知道如何發生? 以及如何計算每一行的總價值以及如何獲得所有項目的總價值?
我建議您將datasetChanged用於列表視圖適配器。
我正在更新我的ans
“現在的問題是,當我運行此代碼並單擊任何數量的textview時,它將僅一次在textview的最后一次設置值,當我再次單擊任何textview並嘗試在文本中設置值時,不允許在任何文本框中設置該值知道如何解決這個問題嗎?”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.