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