случайное изменение вида списка - PullRequest
0 голосов
/ 27 января 2020

У меня есть просмотр списка, когда я изменяю значение одного элемента (счетчика) нажатием кнопки «плюс», все в порядке, пока пользователь прокручивает вниз и показывает больше элементов. И мы видим это на каждой странице прокрутки. изменил значение предмета !!! Я не знаю, почему все выглядит хорошо!

public class MyAdapter extends BaseAdapter  {

    private  String[] from;
    ArrayList <HashMap<String, Object>> BuyList ;
    private  int[] to;
    private Context context;
    private  ArrayList<HashMap<String, Object>> data ;
    private  ArrayList<HashMap<String, Object>> selecteddata;
    private  ArrayList<HashMap<String, Object>> fdata ;
    private  ImageView pay,more;
    private  EditText search;
    private  String user_mobile;
    private  TextView buy_toolbar_count;
    private Holder holder;
   // private HashMap<String, Object> hm;

    public MyAdapter( Context context, ArrayList<HashMap<String, Object>> data,
                      ArrayList<HashMap<String, Object>> selecteddata , String[] from, int[] to, ArrayList Bylist,
                      ImageView pay, ImageView more, String user_mobile, TextView buy_count_toolbar, EditText search) {
        this.data = data;
        this.selecteddata = selecteddata;
        this.fdata = new ArrayList<>(selecteddata);

        this.context = context;
        this.from  = from;
        this.to  = to;
        this.BuyList = Bylist;
        this.pay = pay;
        this.more = more;
        this.search = search;
        this.user_mobile = user_mobile;
        this.buy_toolbar_count = buy_count_toolbar;

    }


    public  void filter(String s, ImageView img) {
        HashMap<String, Object> wp = new HashMap<>();

        if (!s.equals("")) {

            fdata.clear();
            for (int i = 0 ;i<data.size();i++) {
                wp = data.get(i);
                // Log.i("mosi",wp.get("name").toString() + " wp  ");

                if (wp.get("name").toString().toLowerCase().contains(s)) {


                    fdata.add(wp);




                }

            }

        }
        else {
            fdata = new ArrayList<>(selecteddata);

        }
        notifyDataSetChanged();
    }

    public class Holder
    {

        ImageView g_img;
        ImageView plus;
        ImageView mines;
        TextView g_name;
        TextView g_price;
        TextView g_off;
        TextView count;
        TextView f_range;
        TextView sum;
        TextView temp2;
    }
   @Override
    public int getCount() {
        return fdata.size();
    }

    @Override
    public HashMap<String, Object> getItem(int i) {
        return fdata.get(i);
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }
    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {


        Typeface font_titr = Typeface.createFromAsset(context.getAssets(), "fonts/titr.TTF");
        final HashMap<String, Object> hm = fdata.get(position);


        if (convertView == null ) {
            holder = new Holder();
            convertView = LayoutInflater.from(context).
                    inflate(R.layout.my_row_layout2, parent, false);

            holder.g_img = (ImageView) convertView.findViewById(R.id.f_img);
            holder.g_name = (TextView) convertView.findViewById(R.id.f_name);
            holder.g_price = (TextView) convertView.findViewById(R.id.f_price);
            holder.g_off = (TextView) convertView.findViewById(R.id.f_off);
            holder.count = (TextView) convertView.findViewById(R.id.f_count);
            holder.f_range = (TextView) convertView.findViewById(R.id.f_kilo);
            holder.plus = (ImageView) convertView.findViewById(R.id.plus_id_btn);
            holder.mines = (ImageView) convertView.findViewById(R.id.mines_id_btn);
            holder.sum = (TextView) convertView.findViewById(R.id.count_sum_id);
            holder.temp2 = (TextView) convertView.findViewById(R.id.txt2);

            //Date currentTime = Calendar.getInstance().getTime();
            convertView.setTag(holder);
 // Log.i("mosi",convertView.getTag() + "  tagfffff  " + hm.get("convertview"));



 hm.put("convertview", "1");



        }
        else
        {
            holder = (Holder) convertView.getTag();

//            Log.i("mosi",convertView.getTag() + "  tag  " + hm.get("convertview"));
        }




        final View tempview = convertView;



// set font++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


        holder.g_price.setTypeface(font_titr, Typeface.NORMAL);
        holder.g_name.setTypeface(font_titr, Typeface.BOLD);
        holder.g_off.setTypeface(font_titr, Typeface.NORMAL);
        holder.count.setTypeface(font_titr, Typeface.NORMAL);
        holder.sum.setTypeface(font_titr, Typeface.NORMAL);
        holder.temp2.setTypeface(font_titr, Typeface.NORMAL);


//----------------------------------------------------------------------------------------


        // Set pre count and sum

        holder.sum.setText(" میلغ کل : " + hm.get("sum").toString() + " تومان ");
        holder.count.setText(hm.get("count").toString());




        final String oldprice = hm.get("price").toString();




        holder.g_off.setText(hm.get("off").toString());
        holder.g_name.setText(hm.get("disc").toString());
        holder.f_range.setText(hm.get("f_range").toString());
        final float f=
                (Float.valueOf(oldprice)*
                        Float.valueOf(holder.g_off.getText().toString()))/100;

        // holder.g_price.setText(" قیمت :  "+ DtoS((Float.valueOf(oldprice.toString()))-f)+" تومان ");
        holder.g_price.setText(" قیمت :  "+  oldprice +" تومان ");



        File imageFile = new  File(hm.get("image").toString());
        if(imageFile.exists()){
            holder.g_img.setImageBitmap(BitmapFactory.decodeFile(imageFile.getAbsolutePath()));
        }
        else
            holder.g_img.setImageResource(R.drawable.coming_soon);





        holder.plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                change_count(holder, hm, "p", tempview, ChangeType.DtoS((Float.valueOf(oldprice.toString())) - f), position);

            }

        });
        holder.mines.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                change_count(holder, hm, "m", tempview , ChangeType.DtoS((Float.valueOf(oldprice.toString()))-f), position);









            }
        });


// Button Pay && More

        pay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (BuyList.size() > 0) {
                    Intent intent = new Intent(context, Payment_act.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.putExtra("data", BuyList);
                    intent.putExtra("all_data", data);

                    intent.putExtra("mobile", user_mobile);
                    view.getContext().startActivity(intent);
//
                } else {
                    Toast.makeText(context, "سبد خرید شما خالی است", Toast.LENGTH_LONG).show();
                }
            }
        });

        more.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, Choose_act.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("blist", BuyList);
                intent.putExtra("data", data);
                intent.putExtra("mobile", user_mobile);
                view.getContext().startActivity(intent);
                //   ((Activity)context).finish();
            }
        });



// Search -------------------------------------------------------------------

        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence s, int i, int i1, int i2) {
                //  Log.i("mosi", s+"  ---  s ***");
                //  filter(s.toString(), holder.g_img);
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });





        return convertView;

    }


// template





    // Onclick for mines and plus Button
    //@Override
    public void change_count(final  Holder holder1, HashMap<String, Object> hm_addtolist, String tag, View c_view, String oldprice, int position) {

       // Log.i("mosi", position+"  position on list ");
        String is_pack = hm_addtolist.get("is_pack").toString();
        ChangeType ch = new ChangeType();
        double temp1 = 0;
        double p_with_off = 0;

        holder = (Holder) c_view.getTag();

        String off = hm_addtolist.get("off").toString();

        String num_sum = "0";



        if (ch.stringToDouble(off)>0)
        {
            p_with_off = ch.stringToDouble(hm_addtolist.get("price_with_off").toString());
        }
        else
            p_with_off = ch.stringToDouble(oldprice.toString());




        holder.count= (TextView) c_view.findViewById(R.id.f_count);
        holder.sum = (TextView) c_view.findViewById(R.id.count_sum_id);




        if (!holder.count.getText().toString().equals("") && holder.count!= null)
            temp1 = ch.stringToDouble(holder.count.getText().toString());
        //my_alert("", temp1+"");

        if (tag.equals("p")) {
            if (is_pack.equals("1"))
                temp1 = temp1 + 1;
            else
                temp1 = temp1 + 0.5;

            //  Log.i("mosi", " ::: set 2 !!!!");
            holder.count.setText(DtoS(temp1));

            num_sum = String.format("%d", (long)(temp1 * p_with_off));


            holder.sum.setText(" میلغ کل : " + num_sum + " تومان ");

        } else if (tag.equals("m")) {


            if (is_pack.equals("1")) {
                if (temp1 > 1) {
                    temp1 = (temp1 - 1);
                    holder.count.setText(DtoS(temp1));

                    num_sum = String.format("%d", (long) (temp1 * p_with_off));
                    holder.sum.setText(" میلغ کل : " + num_sum + " تومان ");

                } else {
                    holder.count.setText("0");
                    holder.sum.setText("مبلغ کل : 0 تومان");
                    num_sum = "0";
                    BuyList.remove(hm_addtolist);
                    notifyDataSetChanged();
                    buy_toolbar_count.setText(String.valueOf(BuyList.size()));
                }

            }
            else {
                if (temp1 > 0.5) {
                    temp1 = (temp1 - 0.5);
                    holder.count.setText(DtoS(temp1));

                    num_sum = String.format("%d", (long) (temp1 * p_with_off));
                    holder.sum.setText(" میلغ کل : " + num_sum + " تومان ");

                } else {
                    holder.count.setText("0");
                    holder.sum.setText("مبلغ کل : 0 تومان");
                    num_sum = "0";
                    hm_addtolist.put("count","0");
                    hm_addtolist.put("sum","0");
                    BuyList.remove(hm_addtolist);
                    notifyDataSetChanged();
                    buy_toolbar_count.setText(String.valueOf(BuyList.size()));
                }
            }
        }



        //}

        if (!num_sum.equals("0")) {
            hm_addtolist.put("sum", num_sum);
            hm_addtolist.put("count", holder.count.getText().toString());
            boolean check = false;
            for (int i = 0; i < BuyList.size(); i++) {
                if (BuyList.get(i).get("name").toString().equals(hm_addtolist.get("name").toString())) {
                    check = true;
                    HashMap<String, Object> temp_updatelist = BuyList.get(i);
                    temp_updatelist.put("sum", num_sum);
                    temp_updatelist.put("count", holder.count.getText().toString());
                    //  BuyList.add(temp_updatelist);
         //           Log.i("mosi",  "add count "+i+"");
                    // Toast.makeText(context, "ok", Toast.LENGTH_SHORT);
                    notifyDataSetChanged();
                }
            }
            if (!check) {
  //              Log.i("mosi",  "add count to ::  "+hm_addtolist.get("name")+"");
                BuyList.add(hm_addtolist);
                buy_toolbar_count.setText(String.valueOf(BuyList.size()));
                notifyDataSetChanged();
            }

        }


        notifyDataSetChanged();
        // Log.i("mosi", BuyList.toString());

        //   clearbug( c_view);
    }






}

создать список по активности

У меня есть просмотр списка, когда я изменяю значение одного элемента (количество) нажатием кнопки плюс, все в порядке, пока пользователь делает прокрутите вниз и покажите больше предметов И мы увидим, что на каждой странице прокрутки изменилось значение элемента !!! Я не знаю, почему все выглядит хорошо!

 private void setlist() {

        ArrayList<HashMap<String, Object>> selected_data = new ArrayList<>();

        for (int i = 0; i < all_data.size(); i++) {
            if (all_data.get(i).get("type").toString().equals(mtag)) {
                HashMap<String, Object> t = all_data.get(i);

                selected_data.add(t);
            }
        }
        //Log.i("mosi",selected_data.toString());
        EditText search = (EditText) findViewById(R.id.et_search_id);
        ImageView pay = (ImageView) findViewById(R.id.btn_pay_firstpage);
        ImageView more = (ImageView) findViewById(R.id.btn_more_firstpage);


        String[] from = {"image", "name", "price", "off"};
        int[] to = {R.id.f_img, R.id.f_name, R.id.f_price, R.id.f_off};
        final MyAdapter adb = new MyAdapter(getBaseContext(), all_data, selected_data, from, to, BuyList, pay, more, user_mobile, buyCount_toolbar, search);



    lv.setAdapter(adb);

}

У меня есть просмотр списка, когда я изменяю значение одного элемента (счетчик) нажатием кнопки плюс, все в порядке, пока пользователь прокручивает вниз и показывает больше элементов. И мы видим, что на каждой странице свитка менялось значение элемента !!! Я не знаю, почему все выглядит хорошо!

это макет моей активности

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layoutDirection="rtl"
    android:background="@drawable/main_background_theme">

    <include
        android:id="@+id/mytoolbar"
        layout="@layout/toolbar"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"/>
    <include
        android:id="@+id/app_message"
        layout="@layout/message"
        android:layout_height="30dp"
        android:layout_width="match_parent"
        android:layout_below="@+id/mytoolbar"/>

    <include
        android:id="@+id/searchbox_id"
        layout="@layout/searchbox"
        android:layout_height="40sp"
        android:layout_width="match_parent"
        android:layout_below="@+id/app_message"
        android:visibility="invisible"/>

<android.support.v4.widget.DrawerLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/searchbox_id"

    android:id="@+id/FirstPage_id">



<RelativeLayout
    android:id="@+id/rv_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainLayoutActivity">

    <ListView
        android:id="@+id/my_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/listDivader"
        android:dividerHeight="1dp"
        android:paddingBottom="?attr/actionBarSize" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_alignBottom="@id/my_listview"
        android:background="@color/toolbar_back"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/btn_pay_firstpage"
            android:layout_width="0px"
            android:layout_height="match_parent"
            android:layout_weight="50"
            android:paddingLeft="10sp"

            android:src="@drawable/btn_pay" />

        <ImageView
            android:id="@+id/btn_more_firstpage"
            android:layout_width="0px"
            android:layout_height="match_parent"
            android:layout_weight="50"

            android:paddingLeft="10sp"
            android:src="@drawable/btn_more" />


    </LinearLayout>
</RelativeLayout>

<fragment
    android:layout_width="180dp"
    android:layout_height="match_parent"
    android:id="@+id/drawer_fragment"
    android:layout_gravity="start"
    android:layout="@layout/drawer_fragment_layout"
    tools:layout="@layout/drawer_fragment_layout"
    android:name="com.com.seyedi89gmail.sm.zanco.Drawer_fragment">

</fragment>


</android.support.v4.widget.DrawerLayout>


</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 27 января 2020

вы можете использовать NestedScrollview вне списка просмотра и остановить прокрутку списка, используя это: smoothScrollBy (0, 0);

0 голосов
/ 27 января 2020

Удалите notifyDataSetChanged из условий if-else, может это сработает

 public  void filter(String s, ImageView img) {
        HashMap<String, Object> wp = new HashMap<>();

       if (!s.equals("")) {

            fdata.clear();
            for (int i = 0 ;i<data.size();i++) {
                wp = data.get(i);


                if (wp.get("name").toString().toLowerCase().contains(s)) {



                    fdata.add(wp);


                    //notifyDataSetChanged();

                }

            }

        }
        else {
           fdata = new ArrayList<>(selecteddata);
           //notifyDataSetChanged();
       }
        notifyDataSetChanged();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...