Android स्क्रॉल करते समय दृश्य आइटम परिवर्तन स्थिति देखें?




android-listview (3)

अपने एडेप्टर वर्ग में इन दो तरीकों को ओवरराइड करें

@Override
  public int getViewTypeCount() {

   return getCount();
  }

  @Override
  public int getItemViewType(int position) {

   return position;
  }

मेरे आवेदन में मैंने कस्टम सूची दृश्य एडाप्टर का उपयोग किया है। सूची दृश्य आइटम में मैंने एक और लेआउट जोड़ा। क्योंकि मेरी सेवा में एक आदेश में किसी भी क्रम के आइटम हैं। आदेश आइटम दिखाने के लिए मैंने कस्टम सूची दृश्य आइटम के नीचे ऑर्डर आइटम लेआउट जोड़ा। यह ठीक काम कर रहा है। लेकिन सूची को स्क्रॉल करने पर डेटा बदल जाता है।

एडॉप्टर क्लास:

public class PreviousDataAdapter extends BaseAdapter {
    ArrayList<PreviousOrderData> bpData;
    private ArrayList<PreviousOrderData> arraylist;
    ArrayList<OrderItemData> opData;
    private ArrayList<OrderItemData> arraylist1;
    private Activity activity;
    private LayoutInflater inflater;
    String g_orderid;
    DatabaseHandler db;
    SharedPreferences m_sharedPreference;
    SharedPreferences.Editor m_editor;

    ArrayList<String> circless = new ArrayList<String>();

    public PreviousDataAdapter(Activity activity, ArrayList<PreviousOrderData> bpData,ArrayList<OrderItemData> opdata) {
        // TODO Auto-generated constructor stub
        this.activity = activity;
        this.bpData = bpData;
        this.opData=opdata;//k?

       // this.opData=bpData.get()//opdata;
        inflater = LayoutInflater.from(activity);
        db = new DatabaseHandler(activity);

    }


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return bpData.size();
    }

    @Override
    public Object getItem(int location) {
        // TODO Auto-generated method stub
        return bpData.get(location);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    private int lastPosition = -1;
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        Typeface custom_regular = Typeface.createFromAsset(activity.getAssets(),
                "fonts/OpenSans-Regular.ttf");
        m_sharedPreference = activity.getSharedPreferences("save_details", activity.MODE_PRIVATE);
        m_editor = m_sharedPreference.edit();


        //String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
        //final View view;


        final ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = inflater.inflate(R.layout.previousorders_listitem, null);


            viewHolder.date = (TextView) convertView.findViewById(R.id.date);
            viewHolder.orderid = (TextView) convertView.findViewById(R.id.orderid);
            viewHolder.amount = (TextView) convertView.findViewById(R.id.amount);
            viewHolder.status = (TextView) convertView.findViewById(R.id.status);
            viewHolder.ordersinfo=(LinearLayout)convertView.findViewById(R.id.previousorders);
            viewHolder.date .setTypeface(custom_regular);
            viewHolder.orderid.setTypeface(custom_regular);
            viewHolder.amount.setTypeface(custom_regular);
            viewHolder.status.setTypeface(custom_regular);




            viewHolder.ll_individuvalitem = (LinearLayout) convertView.findViewById(R.id.ll_individuvalitem);

            //convertView = view;
            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.date.setText(bpData.get(position).getDate());
        viewHolder.orderid.setText(bpData.get(position).getOrdername());
        viewHolder. amount.setText("Rs."+bpData.get(position).getAmount());
        viewHolder. status.setText(bpData.get(position).getStatus());
      viewHolder.ordersinfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                g_orderid =bpData.get(position).getOrderid();
                Log.v("TAG_ORDERIDADAPTER",""+g_orderid);
                new GetReorder().execute(WebUrl.RechargeServiceURL+"APP_Reorder");



            }
        });


        //Log.d("size:",opData.size()+"");
        if( opData!= null && opData.size() >0){opData.clear();}
        opData = bpData.get(position).getOrderItemDataList();//
        if(opData.size()>0){
            viewHolder.ll_individuvalitem.removeAllViews();
            for (int i = 0; i < opData.size(); i++){
               // Log.v("TAG Number loop",""+opData.get(i).getNumber());
                View itemview = inflater.inflate(R.layout.previousorders_list_single_items, null);
                TextView Number = (TextView)itemview.findViewById(R.id.Number);
                TextView RechargeAmount = (TextView)itemview.findViewById(R.id.RechargeAmount);


                TextView Rechargestatus = (TextView)itemview.findViewById(R.id.Rechargestatus);
                Number.setTypeface(custom_regular);
                RechargeAmount.setTypeface(custom_regular);
                Rechargestatus.setTypeface(custom_regular);

                Number.setText(opData.get(i).getNumber());
                RechargeAmount.setText("Rs."+opData.get(i).getRechargeAmount());
                Rechargestatus.setText(opData.get(i).getRechargestatus());

                viewHolder.ll_individuvalitem.addView(itemview);
            }
        }



        return convertView;
    }


    class ViewHolder {
        TextView date, tx_month, orderid, amount,status;
        LinearLayout ll_individuvalitem,ordersinfo;
    }

    private class GetReorder extends AsyncTask<String, Void, JSONObject> {
        /*String mJourneyDate;
        public GetData(String pJourneyDate) {
            this.mJourneyDate = pJourneyDate;
        }*/
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // pDialog = ProgressDialog.show(getActivity(), "", "");


        }

        @Override
        protected JSONObject doInBackground(String... params) {
            String response;

            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(params[0]);
                List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(4);
                nameValuePair.add(new BasicNameValuePair("OrderID", g_orderid));
                nameValuePair.add(new BasicNameValuePair("DeviceID", m_sharedPreference.getString("deviceId","")));
                nameValuePair.add(new BasicNameValuePair("PlatformID", "3"));
                 nameValuePair.add(new BasicNameValuePair("UserUniqueID", m_sharedPreference.getString("useruid","")));



                httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
                HttpResponse responce = httpclient.execute(httppost);

                HttpEntity httpEntity = responce.getEntity();

                response = EntityUtils.toString(httpEntity);
                 Log.d("response is", response);

                return new JSONObject(response);

            } catch (Exception ex) {

                ex.printStackTrace();

            }

            return null;
        }

        @Override
        protected void onPostExecute(JSONObject result) {
            String Status;

            super.onPostExecute(result);
            //  Log.v("TAG_RESULT",""+result);



            if (result != null) {
                try {
             Intent intent= new Intent(activity, Payment_Actiivity.class);
                    intent.putExtra("jsonfrompayment",result.toString());
                    Log.v("TAG_JSONPAY",""+result.toString());

                    activity.startActivity(intent);


                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                Toast.makeText(activity, "something went wrong", Toast.LENGTH_LONG).show();

            }
        }
    }

}

आप दो सरणियों का उपयोग कर रहे हैं - "bpData" और "opData" और आप केवल तभी सेट करते हैं यदि "opataata" के साथ विशिष्ट परिस्थितियों में।

यह एक खराब डिजाइन है। आपको एक सरणी की आवश्यकता है - यदि "opData" "bpData" पर निर्भर है, तो इसे "bpData" का एक चर बनाएं।

या फिर दोनों को सिंक्रोनाइज़ करने के लिए कुछ लिखें। अन्यथा, आप नहीं जानते कि प्रदर्शन कैसे काम करेगा।


@Override
  public int getViewTypeCount() {

   return getCount();
  }

  @Override
  public int getItemViewType(int position) {

   return position;
  }

मेरे लिए उचित काम करता है





android-listview