列表视图项目滚动机器人时候改变位置? [英] List view items changes position when scrolling android?

查看:166
本文介绍了列表视图项目滚动机器人时候改变位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序使用的自定义列表视图的适配器。在列表视图项我又增加了布局。因为在我服务的一个订单有任何数量订单的产品。对于显示订单项目我添加了订单项目布局下面的自定义列表视图item.it工作正常。但是,当滚动列表视图中的数据被更改。

适配器类:

 公共类previousDataAdapter延伸BaseAdapter {
    ArrayList的< previousOrderData> bpData;
    私人的ArrayList< previousOrderData> ArrayList的;
    ArrayList的< OrderItemData> opData;
    私人的ArrayList< OrderItemData> arraylist1;
    私人活动的活动;
    私人LayoutInflater充气;
    字符串g_orderid;
    数据库处理器分贝;
    共享preferences m_shared preference;
    共享preferences.Editor m_editor;

    ArrayList的<字符串> circless =新的ArrayList<字符串>();

    公共previousDataAdapter(活动活动,ArrayList的< previousOrderData> bpData,ArrayList的< OrderItemData> opdata){
        // TODO自动生成构造函数存根
        this.activity =活动;
        this.bpData = bpData;
        this.opData = opdata; // K +

       // this.opData = bpData.get()// opdata;
        充气= LayoutInflater.from(活动);
        DB =新的数据库处理器(活动);

    }


    @覆盖
    公众诠释getCount将(){
        // TODO自动生成方法存根
        返回bpData.size();
    }

    @覆盖
    公共对象的getItem(INT位置){
        // TODO自动生成方法存根
        返回bpData.get(位置);
    }

    @覆盖
    众长getItemId(INT位置){
        // TODO自动生成方法存根
        返回0;
    }

    私人诠释lastPosition = -1;
    @覆盖
    公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
        字样custom_regular = Typeface.createFromAsset(activity.getAssets()
                字体/ OpenSans-Regular.ttf);
        m_shared preference = activity.getShared preferences(save_details,activity.MODE_PRIVATE);
        m_editor = m_shared preference.edit();


        //的String []月= {一月,二月,月,四月,五一,君,七月,八月,SEP,十月,十一月,十二月};
        //最后查看视图;


        最后ViewHolder viewHolder;
        如果(convertView == NULL){
            viewHolder =新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 =图。
            convertView.setTag(viewHolder);
        }其他 {
            viewHolder =(ViewHolder)convertView.getTag();
        }
        viewHolder.date.setText(bpData.get(位置).getDate());
        viewHolder.orderid.setText(bpData.get(位置).getOrdername());
        viewHolder。 amount.setText(RS+ bpData.get(位置).getAmount());
        viewHolder。 status.setText(bpData.get(位置).getStatus());
      viewHolder.ordersinfo.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                g_orderid = bpData.get(位置).getOrderid();
                Log.v(TAG_ORDERIDADAPTER,+ g_orderid);
                新GetReorder()执行(WebUrl.RechargeServiceURL +APP_Reorder);



            }
        });


        //Log.d("size:",opData.size()+);
        如果(opData =空&安培;!&安培; opData.size()大于0){opData.clear();}
        opData = bpData.get(位置).getOrderItemDataList(); //
        如果(opData.size()大于0){
            viewHolder.ll_individuvalitem.removeAllViews();
            的for(int i = 0; I< opData.size();我++){
               // Log.v(标签号循环,+ opData.get(I).getNumber());
                查看ItemView控件= inflater.inflate(R.layout previousorders_list_single_items,NULL);
                TextView的数=(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(ⅰ).getNumber());
                RechargeAmount.setText(RS。+ opData.get(ⅰ).getRechargeAmount());
                Rechargestatus.setText(opData.get(ⅰ).getRechargestatus());

                viewHolder.ll_individuvalitem.addView(ItemView控件);
            }
        }



        返回convertView;
    }


    类ViewHolder {
        TextView的日期,tx_month,订单ID,数量,状态;
        的LinearLayout ll_individuvalitem,ordersinfo;
    }

    私有类GetReorder扩展的AsyncTask<字符串,无效的JSONObject> {
        / *字符串mJourneyDate;
        公众的GetData(字符串pJourneyDate){
            this.mJourneyDate = pJourneyDate;
        } * /
        @覆盖
        在preExecute保护无效(){
            super.on preExecute();
            // pDialog = ProgressDialog.show(getActivity(),,);


        }

        @覆盖
        受保护的JSONObject doInBackground(字符串... PARAMS){
            字符串响应;

            尝试 {
                HttpClient的HttpClient的=新DefaultHttpClient();
                HttpPost httppost =新HttpPost(PARAMS [0]);
                名单<的NameValuePair>的NameValuePair =新的ArrayList<的NameValuePair>(4);
                nameValuePair.add(新BasicNameValuePair(订单ID,g_orderid));
                nameValuePair.add(新BasicNameValuePair(的DeviceID,m_shared preference.getString(DEVICEID,)));
                nameValuePair.add(新BasicNameValuePair(PlatformID,3));
                 nameValuePair.add(新BasicNameValuePair(UserUniqueID,m_shared preference.getString(useruid,)));



                httppost.setEntity(新UrlEn codedFormEntity(的NameValuePair));
                HTT presponse的反响= httpclient.execute(httppost);

                HttpEntity httpEntity = responce.getEntity();

                响应= EntityUtils.toString(httpEntity);
                 Log.d(反应,反应);

                返回新的JSONObject(响应);

            }赶上(例外前){

                ex.printStackTrace();

            }

            返回null;
        }

        @覆盖
        保护无效onPostExecute(JSONObject的结果){
            字符串状态;

            super.onPostExecute(结果);
            // Log.v(TAG_RESULT,+导致);



            如果(结果!= NULL){
                尝试 {
             意向意图=新的意图(活动,Payment_Actiivity.class);
                    intent.putExtra(jsonfrompayment,result.toString());
                    Log.v(TAG_JSONPAY,+ result.toString());

                    activity.startActivity(意向);


                }赶上(例外五){
                    e.printStackTrace();
                }
            } 其他 {
                Toast.makeText(活动,出事了,Toast.LENGTH_LONG).show();

            }
        }
    }

}
 

解决方案

在适配器类中重写这两种方法

  @覆盖
  公众诠释getViewTypeCount(){

   返回getCount将();
  }

  @覆盖
  公众诠释getItemViewType(INT位置){

   返回的位置;
  }
 

In my application i used custom list view adapter. In the list view item i added another layout. because in my service one order have any number of order items. For showing the order items i added the order item layout below to custom list view item.it is working fine. but when scroll the list view the data is changed.

adapter class:

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();

            }
        }
    }

}

解决方案

In your adapter class override these two methods

@Override
  public int getViewTypeCount() {

   return getCount();
  }

  @Override
  public int getItemViewType(int position) {

   return position;
  }

这篇关于列表视图项目滚动机器人时候改变位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆