Android 列表视图仍显示已删除的项目

Android 列表视图仍显示已删除的项目,android,Android,我的适配器项已在arraylist中删除,但listview未更新,仍显示从数据库中删除的项。只有当从其他片段导航到此片段时,它才有bug 请帮忙。不知道哪里出错了。我一直在打电话 下面是我的片段文件 public class SupplierViewFragment extends Fragment { private ArrayList<Supplier> suppliers = new ArrayList<>(); ListView lvListVi

我的适配器项已在arraylist中删除,但listview未更新,仍显示从数据库中删除的项。只有当从其他片段导航到此片段时,它才有bug

请帮忙。不知道哪里出错了。我一直在打电话 下面是我的片段文件

public class SupplierViewFragment extends Fragment {
    private ArrayList<Supplier> suppliers = new ArrayList<>();
    ListView lvListView;
    FunDapter adapter;
    ListView lvSupplierList;
    TextView tvSupplierViewMessage;
    private FragmentTransaction fragmentTransaction;
    ViewPager pager;

    private AdapterView.AdapterContextMenuInfo info;
    BindDictionary<Supplier> dictionary = new BindDictionary<>();

    public SupplierViewFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_supplier_view, container, false);
        tvSupplierViewMessage = (TextView) view.findViewById(R.id.tvSupplierViewMessage);
        tvSupplierViewMessage.setVisibility(View.INVISIBLE);

        getData("supplier-view-servlet");
        dictionary = new BindDictionary<>();
        dictionary.addStringField(R.id.tvSupplierListID, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return "ID: " + item.getSupplierID();
            }
        });
        dictionary.addStringField(R.id.tvSupplierListCompanyName, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return item.getSupplierCompanyName();
            }
        });
        dictionary.addStringField(R.id.tvSupplierListName, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return "(" + item.getSupplierName() + ")";
            }
        });
        dictionary.addStringField(R.id.tvSupplierListAddress, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return  item.getSupplierAddress();
            }
        });
        dictionary.addStringField(R.id.tvSupplierListTelp, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return  item.getSupplierTelp();
            }
        });
        dictionary.addStringField(R.id.tvSupplierListMobile, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return  item.getSupplierMobile();
            }
        });
        dictionary.addStringField(R.id.tvSupplierListEmail, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return  item.getSupplierEmail();
            }
        });
        dictionary.addStringField(R.id.tvSupplierListCity, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return  getCityName("cities-servlet?city-id=" + item.getSupplierCity());
            }
        });
        dictionary.addStringField(R.id.tvSupplierListCountry, new StringExtractor<Supplier>() {
            @Override
            public String getStringValue(Supplier item, int position) {
                return  getCountryName("countries-servlet?city-id=" + item.getSupplierCity());
            }
        });

        adapter = new FunDapter(SupplierViewFragment.this.getActivity(),suppliers,R.layout.supplier_list_layout,dictionary);
        lvSupplierList = (ListView) view.findViewById(R.id.lvSupplierView);
        lvSupplierList.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        registerForContextMenu(lvSupplierList);
        pager = (ViewPager) getActivity().findViewById(R.id.pager);

        return view;
    }

    public void refreshApi(){
        suppliers.clear();
        adapter.resetData();

        getData("supplier-view-servlet");
        lvSupplierList.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        lvSupplierList.invalidate();
        //adapter = new FunDapter(SupplierViewFragment.this.getActivity(),suppliers,R.layout.supplier_list_layout,dictionary);

        Log.d("REFRESH", suppliers.size()+" -------------------");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {

        info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        String text = null;
        switch (item.getItemId()){
            case R.id.supplier_view_delete_id:

                AlertDialog.Builder builder = new AlertDialog.Builder(SupplierViewFragment.this.getActivity());

                builder.setMessage("Are sure to delete selected supplier?")
                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                Supplier supplier = new Supplier(suppliers.get(info.position).getSupplierID());

                                try {
                                    Log.d("Supplier Size:",suppliers.size() + "to delete:" + info.position);

                                    deleteData("supplier-delete-servlet?supplier-id=" + supplier.getSupplierID() );
                                    suppliers.clear();
                                    refreshApi();
                                    Log.d("Supplier AFTER:",suppliers.size() + "to delete:" + info.position);
                                    adapter.notifyDataSetChanged();
                                    adapter.notifyDataSetInvalidated();
                                    pager.setCurrentItem(0);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }

                                Toast.makeText(SupplierViewFragment.this.getActivity(),"Supplier Deleted",Toast.LENGTH_SHORT).show();
                            }
                        })
                        .setNegativeButton("No",null);
                AlertDialog alertDialog = builder.create();
                alertDialog.show();

                return true;

            case R.id.supplier_view_edit_id:

                //StaffEditFragment staffEditFragment = new StaffEditFragment.newInstance("Some1","Some2");
                Log.d("Current Position:",""+info.position);
                Supplier supplierEdit = suppliers.get(info.position);
                Bundle bundle = new Bundle();
                bundle.putInt("supplierID",supplierEdit.getSupplierID());
                SupplierEditFragment supplierEditFragment = new SupplierEditFragment();

                supplierEditFragment.setArguments(bundle);
                fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.main_container,supplierEditFragment);
                ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Edit Supplier");
                fragmentTransaction.commit();

            default:
                return super.onContextItemSelected(item);
        }
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getActivity().getMenuInflater();
        inflater.inflate(R.menu.supplier_context_menu,menu);
    }

    public void deleteData(String servletAddress){
        JsonRequestHelper requestHelper = new JsonRequestHelper();
        JSONArray jsonArray = requestHelper.getJsonArrayViaGET(servletAddress);
    }
    public String getCountryName(String servletAddress){
        String countryName = null;
        try {
            JsonRequestHelper requestHelper = new JsonRequestHelper();
            JSONArray jsonArray = requestHelper.getJsonArrayViaGET(servletAddress);

            for (int i = 0; i < jsonArray.length(); i++) {
                countryName = jsonArray.getJSONObject(i).getString("country-name").toString();
            }
        }

        catch (Exception e) {
            e.printStackTrace();
        }
        Log.d("cityName:",countryName);
        return countryName;
    }

    public String getCityName(String servletAddress){
        String cityName = null;
        try {
            JsonRequestHelper requestHelper = new JsonRequestHelper();
            JSONArray jsonArray = requestHelper.getJsonArrayViaGET(servletAddress);

            for (int i = 0; i < jsonArray.length(); i++) {
                cityName = jsonArray.getJSONObject(i).getString("city-name").toString();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        Log.d("cityName:",cityName);
        return cityName;
    }

    public void getData(String servletAddress){
        JsonRequestHelper requestHelper = new JsonRequestHelper();
        JSONArray jsonArray = requestHelper.getJsonArrayViaGET(servletAddress);
        Supplier supplier = new Supplier();
        if (jsonArray == null) {
            //Log.d("Reach000","#####################");
            tvSupplierViewMessage.setVisibility(View.VISIBLE);
            tvSupplierViewMessage.setText("Error Connecting Database");
            Toast.makeText(SupplierViewFragment.this.getActivity(), "Error Connection", Toast.LENGTH_SHORT).show();
        }
        else {
            tvSupplierViewMessage.setVisibility(View.INVISIBLE);
            tvSupplierViewMessage.setText("");
            try {

                for (int i = 0; i < jsonArray.length(); i++) {
                    supplier = new Supplier();
                    supplier.setSupplierID(Integer.parseInt(jsonArray.getJSONObject(i).get("id").toString()));
                    supplier.setSupplierCompanyName(jsonArray.getJSONObject(i).get("company-name").toString());
                    supplier.setSupplierName(jsonArray.getJSONObject(i).get("name").toString());
                    supplier.setSupplierAddress(jsonArray.getJSONObject(i).get("address").toString());
                    supplier.setSupplierCity(Integer.parseInt(jsonArray.getJSONObject(i).get("city-id").toString()));
                    supplier.setSupplierEmail(jsonArray.getJSONObject(i).get("email").toString());
                    supplier.setSupplierTelp(jsonArray.getJSONObject(i).get("telp").toString());
                    supplier.setSupplierMobile(jsonArray.getJSONObject(i).get("mobile").toString());

                    suppliers.add(supplier);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}
公共类SupplierViewFragment扩展了片段{
私有ArrayList供应商=新ArrayList();
ListView-lvListView;
眼底适配器;
ListView供应商列表;
TextView tvSupplierViewMessage;
私人碎片交易;
查看寻呼机;
私有AdapterView.AdapterContextMenuInfo信息;
BindDictionary=新建BindDictionary();
公共供应商视图片段(){
//必需的空公共构造函数
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u supplier\u视图,容器,假);
tvSupplierViewMessage=(TextView)view.findViewById(R.id.tvSupplierViewMessage);
tvSupplierViewMessage.setVisibility(View.INVISIBLE);
getData(“供应商视图servlet”);
dictionary=新绑定dictionary();
dictionary.addStringField(R.id.tvSupplierListID,新的StringExtractor(){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
返回“ID:+item.getSupplierID();
}
});
dictionary.addStringField(R.id.tvSupplierListCompanyName,新StringExtractor(){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
return item.getSupplierCompanyName();
}
});
dictionary.addStringField(R.id.tvSupplierListName,新StringExtractor(){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
返回“(“+item.getSupplierName()+”)”;
}
});
dictionary.addStringField(R.id.tvSupplierListAddress,新StringExtractor()){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
return item.getSupplierAddress();
}
});
dictionary.addStringField(R.id.tvSupplierListTelp,新的StringExtractor(){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
return item.getSupplierTelp();
}
});
dictionary.addStringField(R.id.tvSupplierListMobile,新StringExtractor()){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
return item.getSupplierMobile();
}
});
dictionary.addStringField(R.id.tVsupplierListMail,新StringExtractor()){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
return item.getSupplierEmail();
}
});
dictionary.addStringField(R.id.tvSupplierListCity,新StringExtractor()){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
返回getCityName(“城市servlet?城市id=“+item.getSupplierCity());
}
});
dictionary.addStringField(R.id.tvSupplierListCountry,新StringExtractor()){
@凌驾
公共字符串getStringValue(供应商项目,整数位置){
返回getCountryName(“国家servlet?城市id=“+item.getSupplierCity());
}
});
adapter=new FunDapter(SupplierViewFragment.this.getActivity(),suppliers,R.layout.supplier\u list\u layout,dictionary);
lvSupplierList=(ListView)view.findViewById(R.id.lvSupplierView);
lvSupplierList.setAdapter(适配器);
adapter.notifyDataSetChanged();
registerForContextMenu(lvSupplierList);
pager=(ViewPager)getActivity().findViewById(R.id.pager);
返回视图;
}
公共API(){
供应商。清除();
adapter.resetData();
getData(“供应商视图servlet”);
lvSupplierList.setAdapter(适配器);
adapter.notifyDataSetChanged();
lvSupplierList.invalidate();
//adapter=new FunDapter(SupplierViewFragment.this.getActivity(),suppliers,R.layout.supplier\u list\u layout,dictionary);
Log.d(“刷新”,suppliers.size()+“------------------------”;
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
info=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
字符串文本=空;
开关(item.getItemId()){
案例R.id.供应商\查看\删除\ id:
AlertDialog.Builder=新建AlertDialog.Builder(SupplierViewFragment.this.getActivity());
builder.setMessage(“确定要删除所选供应商吗?”)
.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
供应商=新供应商(suppliers.get(info.position.getSupplierID());
试一试{
Log.d(“供应商规模:”,供应商.Size()+”删除:“+info.position”);
deleteData(“供应商删除servlet?供应商id=“+supplier.getSupplierID());
供应商。清除();
刷新API();
Log.d(“供应商在:”,供应商.size()+”之后删除:“+info.position”);
adapter.notifyDataSetChanged();
adapter.notifyDataSetInvalidated();
传呼机。
public void updateDataset(ArrayList<Supplier> suppliers) {
this.suppliers = suppliers;
notifyDatasetChanged();
}
adapter.updateDataset(ArrayList<Supplier> suppliers)
            return super.onContextItemSelected(item);