簡體   English   中英

在列表視圖Android中的特定行中設置textview值

[英]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用於列表視圖適配器。

  • 首先將該文本視圖的位置標記為mTextViewOk.setTag(position);
  • 在onClick中獲取位置int pos = Integer.parseInt(mTextViewOk.getTag()。toString());
  • 從數組列表中獲取值,即對象值。
  • 更改您需要更改的值。
  • 最后使用adapter.notifyDataSetChanged();

我正在更新我的ans

“現在的問題是,當我運行此代碼並單擊任何數量的textview時,它將僅一次在textview的最后一次設置值,當我再次單擊任何textview並嘗試在文本中設置值時,不允許在任何文本框中設置該值知道如何解決這個問題嗎?”

  • 其背后的原因是列表視圖行為,它將保留單個頁面的元素,即:)如果您有50個項目,並且由於列表視圖項目的大小而只能在一個頁面中顯示5個項目,則適配器將保留最后一個元素的數據。如果您將其更改為getView,則它將更新最后一個項目。 所以
  • 您必須如上所述將Tag()的位置設置為該文本視圖。(前兩點)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM