片段列表视图的最后一个值不会消失

时间:2017-07-11 08:09:22

标签: android listview android-fragments

我有listview所有值都被删除并正确更新,但在listview中只删除了最后一个值。 添加了完整的片段代码。看看

例如 如果我在listview中有三个值如果我删除1和2它的删除和列表视图正确刷新但最后一个没有在列表视图中刷新

    private SwipeMenuListView mylistview;
    String userid;
    private EditText txtsearch;
    private ArrayList<JobItem> jobitems;
    private JobListAdapter adapter;
    SwipeMenuCreator creator;
    ImageLoader imageLoader;
    DisplayImageOptions options;

    public Fragment_Employer_MyJobList() {
    }

    public static float dp2px(Context context, int dipValue) {
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.layoutjoblist, container, false);


        imageLoader = ImageLoader.getInstance();
        options = new DisplayImageOptions.Builder().cacheInMemory(true)
                .displayer(new RoundedBitmapDisplayer(1000))
                .cacheOnDisc(true).resetViewBeforeLoading(true)
                .showImageForEmptyUri(R.drawable.img_app_icon)
                .showImageOnFail(R.drawable.img_app_icon)
                .showImageOnLoading(R.drawable.img_app_icon).build();

        mylistview = (SwipeMenuListView) rootView.findViewById(R.id.mylistview);
        creator = new SwipeMenuCreator() {

            @Override
            public void create(SwipeMenu menu) {
                // create "open" item
                SwipeMenuItem openItem = new SwipeMenuItem(
                        getActivity());
                // set item background
                openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,
                        0xCE)));
                // set item width
                openItem.setWidth((int) dp2px(getActivity(), 90));
                // set item title
                openItem.setTitle("DELETE");
                // set item title fontsize
                openItem.setTitleSize(18);
                // set item title font color
                openItem.setTitleColor(Color.WHITE);
                // add to menu
                menu.addMenuItem(openItem);
            }
        };

        txtsearch = (EditText) rootView.findViewById(R.id.txtsearch);
        txtsearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                                      int count) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }

            @Override
            public void afterTextChanged(Editable theWatchedText) {
                String text = txtsearch.getText().toString().toLowerCase(Locale.getDefault());
                if (adapter != null)
                    adapter.filter(text);
            }
        });


        return rootView;
    }

    SharedPreferences settings;

    @Override
    public void onResume() {
        super.onResume();
        jobitems = new ArrayList<JobItem>();
        jobitems.clear();
        adapter.notifyDataSetChanged();


        settings = getActivity().getSharedPreferences(AppUtils.PREFS_NAME, Context.MODE_PRIVATE);
        userid = settings.getString("userid", "");
        AuthController.getStaticInstance().

                employer_joblist(getActivity(), userid, APIConstants

                        .POST, new AuthControllerInterface.AuthControllerCallBack()

                {
                    @Override
                    public void onSuccess(String message) {
                        Log.e("==response==>", "==response==>" + message);
                        try {
                            JSONArray mainarray = new JSONArray(message);
                            for (int i = 0; i < mainarray.length(); i++) {
                                JSONObject json_job = mainarray.getJSONObject(i);
                                JobItem item = new JobItem();
                                item.Id = json_job.getString("ID");
                                item.EMPID = json_job.getString("EMPID");
                                item.TITLE = json_job.getString("TITLE");
                                item.DESC = json_job.getString("DESC");
                                item.CID = json_job.getString("CID");
                                item.PRICE = json_job.getString("PRICE");
                                item.LOCAT = json_job.getString("LOCAT");
                                item.ADATE = json_job.getString("ADATE");
                                item.FOLLOW = json_job.getString("FOLLOW");

                                JSONArray array = json_job.getJSONArray("IMAGES");
                                if (array.length() > 0) {
                                    if (!array.isNull(0))
                                        item.IMG1 = array.getString(0);
                                    if (!array.isNull(1))
                                        item.IMG2 = array.getString(1);
                                    if (!array.isNull(2))
                                        item.IMG3 = array.getString(2);
                                    if (!array.isNull(3))
                                        item.IMG4 = array.getString(3);
                                    if (!array.isNull(4))
                                        item.IMG5 = array.getString(4);
                                }


                                jobitems.add(item);
                            }
                            adapter = new JobListAdapter(getActivity(), jobitems);
                            mylistview.setAdapter(adapter);
                            mylistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                @Override
                                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                                    JobItem item = jobitems.get(position);
                                    Intent intent = new Intent(getActivity(), Activity_Emp_jobdetail.class);
                                    Bundle bundle = new Bundle();
                                    bundle.putSerializable("jobitem", item);
                                    intent.putExtras(bundle);
                                    startActivity(intent);
                                }
                            });
                            mylistview.setMenuCreator(creator);

                            mylistview.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
                                @Override
                                public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
                                    switch (index) {
                                        case 0:
                                            // unfollow
                                            userid = settings.getString("userid", "");
                                            AuthController.getStaticInstance().employer_delete_job(getActivity(), userid, jobitems.get(position).Id, APIConstants.POST, new AuthControllerInterface.AuthControllerCallBack() {
                                                @Override
                                                public void onSuccess(String message) {
                                                    Log.e("==response==>", "==response==>" + message);

                                                    try {
                                                        JSONObject obj = new JSONObject(message);
                                                        Toast.makeText(getActivity(), obj.getString("ERROR") + "", Toast.LENGTH_LONG).show();
                                                       // onResume();
                                                    } catch (JSONException e) {
                                                        e.printStackTrace();
                                                        Toast.makeText(getActivity(), message + "", Toast.LENGTH_LONG).show();
                                                       // onResume();
                                                    }

                                                    //setup

                                                    onResume();


                                                }

                                                @Override
                                                public void onFailed(String error) {
                                                    Log.e("==error==>", "==error==>" + error);
                                                }

                                            }, Fragment_Employer_MyJobList.this);
                                            break;

                                    }
                                    // false : close the menu; true : not close the menu
                                    return false;

                                }
                            });
                        } catch (JSONException e) {
                            e.printStackTrace();
                            try {
                                JSONObject obj = new JSONObject(message);
                                Toast.makeText(getActivity(), obj.getString("ERROR") + "", Toast.LENGTH_LONG).show();
                            } catch (JSONException e1) {
                                e1.printStackTrace();
                                Toast.makeText(getActivity(), message + "", Toast.LENGTH_LONG).show();
                            }
                        }
                    }

                    @Override
                    public void onFailed(String error) {
                        Log.e("==error==>", "==error==>" + error);
                    }
                }, Fragment_Employer_MyJobList.this);


    }

    @Override
    public void showLoading() {
        AppUtils.showProgress(getActivity(), "Please wait...");
      //  onResume();
    }

    @Override
    public void stopLoading() {
        AppUtils.dismissProgress();
      // onResume();
    }


    public class OnItemClickListner implements View.OnClickListener {

        int mposition;
        JobItem item;

        public OnItemClickListner(int position, JobItem item) {
            this.mposition = position;
            this.item = item;
        }

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), Activity_Emp_jobdetail.class);
            Bundle bundle = new Bundle();
            bundle.putSerializable("jobitem", item);
            intent.putExtras(bundle);
            startActivity(intent);
        }
    }

    private class JobListAdapter extends BaseAdapter {
        LayoutInflater _inflater;
        private List<JobItem> worldpopulationlist = null;
        private ArrayList<JobItem> arraylist;

        public JobListAdapter(Context context, List<JobItem> worldpopulationlist) {
            _inflater = LayoutInflater.from(context);
            this.worldpopulationlist = worldpopulationlist;
            this.arraylist = new ArrayList<JobItem>();
            this.arraylist.addAll(worldpopulationlist);
        }

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

        public JobItem getItem(int position) {
            // TODO Auto-generated method stub
            return worldpopulationlist.get(position);
        }

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

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

            ViewHolder _holder;
            if (convertView == null) {

                convertView = _inflater.inflate(R.layout.layout_job_row, null);
                _holder = new ViewHolder();

                _holder.txtjobtitle = (TextView) convertView
                        .findViewById(R.id.txtjobtitle);
                _holder.txtjobbudget = (TextView) convertView
                        .findViewById(R.id.txtjobbudget);
                _holder.txtjobdesc = (TextView) convertView
                        .findViewById(R.id.txtjobdesc);
                _holder.imageviewjob = (ImageView) convertView
                        .findViewById(R.id.imageviewjob);
                _holder.txtlocation = (TextView) convertView
                        .findViewById(R.id.txtlocation);
                convertView.setTag(_holder);
            } else {
                _holder = (ViewHolder) convertView.getTag();
            }

            _holder.txtjobtitle.setText(worldpopulationlist.get(position).TITLE.trim());
            _holder.txtjobbudget.setText(worldpopulationlist.get(position).PRICE.trim());
            _holder.txtjobdesc.setVisibility(View.VISIBLE);
            _holder.txtjobbudget.setVisibility(View.GONE);
            _holder.txtjobdesc.setText(worldpopulationlist.get(position).DESC);
            imageLoader.displayImage(worldpopulationlist.get(position).IMG1, _holder.imageviewjob, options);
            _holder.txtlocation.setText(worldpopulationlist.get(position).LOCAT.trim());
            //convertView.setOnClickListener(new OnItemClickListner(position, worldpopulationlist.get(position)));
            return convertView;
        }

        private class ViewHolder {
            ImageView imageviewjob;
            TextView txtjobtitle, txtjobdesc;
            TextView txtlocation, txtjobbudget;
        }


        // Filter Class
        public void filter(String charText) {
            charText = charText.toLowerCase(Locale.getDefault());
            worldpopulationlist.clear();
            if (charText.length() == 0) {
                worldpopulationlist.addAll(arraylist);
            } else {
                for (JobItem wp : arraylist) {
                    if (wp.TITLE.toLowerCase(Locale.getDefault())
                            .contains(charText)) {
                        worldpopulationlist.add(wp);
                    }
                }
            }
            notifyDataSetChanged();
        }
    }


}

2 个答案:

答案 0 :(得分:0)

您必须通过调用适配器的ListView方法告诉您的List其内容已发生变化notifyDataSetChanged()

此外,您不应创建ArrayList的新实例,而只应清除旧实例。在清除之前不要忘记检查空值。

答案 1 :(得分:0)

尝试使用null之类的方法再次调用适配器。

setListAdapter()