如何从Fragment中删除项目

时间:2018-05-04 12:16:39

标签: android android-fragments

我正在尝试使用列表中的删除菜单从列表视图中删除列表项。我的申请必须删除。

我需要从片段中删除项目。

项目列表中的问题,我不知道如何定义此List<Item> listtache

我使用它,我可以启动应用程序,一切正确加载。请帮帮我。

public class Tachefragment extends Fragment implements AdapterView.OnItemClickListener {
String supprimertache = "http://192.168.1.15/projet/supprimertache.php";
private static final int CODE_GET_REQUEST = 1024;
Httppars ht = new Httppars();
TextView txtmen;
ProgressBar progressBar;
ListView listview;
Typeface type;
ImageView img;
HashMap<String,String> hashMap = new HashMap<>();
ItemAdapter adapter ;
String listviewid;
List<Item> listtache;
List<String> idlist = new ArrayList<>();
public Tachefragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_tachefragment, container, false);
    txtmen = (TextView) rootView.findViewById(R.id.textmenu);
    img = (ImageView) rootView.findViewById(R.id.imgmenu);
    progressBar = (ProgressBar) rootView.findViewById(R.id.ProgressBar1);
    listview = (ListView) rootView.findViewById(R.id.listtask);
    type = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Montserrat-Light.otf");
    txtmen.setTypeface(type);
    listview.setOnItemClickListener(this);
    listtache = new ArrayList<Item>();
    new ParseJSonDataClass(container.getContext()).execute();
    return rootView;

}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    listviewid = idlist.get(i).toString();
    Toast.makeText(getContext() , listviewid.toString() , Toast.LENGTH_SHORT).show();
}

private class ParseJSonDataClass extends AsyncTask<Void, Void, Void>  {
    public Context context;
    String FinalJSonResult;
     List<Item> item;
    public ParseJSonDataClass(Context context) {
        this.context = context;
    }
    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }
    @Override
    protected Void doInBackground(Void... voids) {
        httpwebservice htp = new httpwebservice(Link.affichertache);
        try {
            htp.ExecutePostRequest();
            if (htp.getResponseCode() == 200) {
                FinalJSonResult = htp.getResponse();
                if (FinalJSonResult != null) {

                    JSONArray jsonArray = null;
                    try {
                        jsonArray = new JSONArray(FinalJSonResult);
                        JSONObject jsonObject;
                        Item itm;
                        item = new ArrayList<Item>();
                        for (int i = 0; i < jsonArray.length(); i++) {
                            itm = new Item();
                            jsonObject = jsonArray.getJSONObject(i);
                            idlist.add(jsonObject.getString("idt").toString());
                            itm.setNomt(jsonObject.getString("nomt"));
                            itm.setDatet(jsonObject.getString("datet"));
                            itm.setHeuredebut(jsonObject.getString("heuredebut"));
                            itm.setTempstotal(jsonObject.getString("tempstotal"));
                            itm.setDescription(jsonObject.getString("description"));
                            item.add(itm);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } else {

                    Toast.makeText(context, htp.getErrorMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        if (item != null) {
            progressBar.setVisibility(View.GONE);
            listview.setVisibility(View.VISIBLE);
            adapter = new ItemAdapter(item, context);
            listview.setAdapter(adapter);
            adapter.notifyDataSetChanged();
            registerForContextMenu(listview);
        } else {
            progressBar.setVisibility(View.GONE);
            txtmen.setVisibility(View.VISIBLE);
            img.setVisibility(View.VISIBLE);
        }
    }
}

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

@Override
public boolean onContextItemSelected(MenuItem item) {
    final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
     final Item selectitem = (Item) adapter.getItem(info.position);

    switch (item.getItemId()){
        case R.id.supprimer:
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setMessage("Voulez vous supprimer cette tache" + " " + selectitem.getNomt()+" !")
            .setCancelable(false)
                    .setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {

                            listtache.remove(selectitem);
                            adapter.notifyDataSetChanged();
                        }
                    })
                    .setNegativeButton("Non", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.cancel();
                        }
                    });
             AlertDialog alertDialog = builder.create();
            alertDialog.show();
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
}

1 个答案:

答案 0 :(得分:0)

  • 在初始化代码listtache中,但它是空列表。如果项目为空,则无法删除项目。如果要从列表视图中删除项目,则应使用适配器中使用的item
  • 在下面的示例listtache中,替换为mListItem

例如:

String listviewid;
List<Item> mListItem;
HashMap<String,String> hashMap = new HashMap<>();
List<String> idlist = new ArrayList<>();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_tachefragment, container, false);
    txtmen = (TextView) rootView.findViewById(R.id.textmenu);
    img = (ImageView) rootView.findViewById(R.id.imgmenu);
    progressBar = (ProgressBar) rootView.findViewById(R.id.ProgressBar1);
    listview = (ListView) rootView.findViewById(R.id.listtask);

    type = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Montserrat-Light.otf");
    txtmen.setTypeface(type);
    listview.setOnItemClickListener(this);

    mListItem = new ArrayList<Item>();
    ht= new Httppars();

    new ParseJSonDataClass(container.getContext()).execute();
    return rootView;

}

private class ParseJSonDataClass extends AsyncTask<Void, Void, Void>  {
    public Context context;
    String FinalJSonResult;

    public ParseJSonDataClass(Context context) {
        this.context = context;
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected Void doInBackground(Void... voids) {
        httpwebservice htp = new httpwebservice(Link.affichertache);
        try {
            htp.ExecutePostRequest();
            if (htp.getResponseCode() == 200) {
                FinalJSonResult = htp.getResponse();
                if (FinalJSonResult != null) {

                    JSONArray jsonArray = null;
                    try {
                        jsonArray = new JSONArray(FinalJSonResult);
                        JSONObject jsonObject;
                        Item itm;
                        for (int i = 0; i < jsonArray.length(); i++) {
                            itm = new Item();
                            jsonObject = jsonArray.getJSONObject(i);
                            idlist.add(jsonObject.getString("idt").toString());
                            itm.setNomt(jsonObject.getString("nomt"));
                            itm.setDatet(jsonObject.getString("datet"));
                            itm.setHeuredebut(jsonObject.getString("heuredebut"));
                            itm.setTempstotal(jsonObject.getString("tempstotal"));
                            itm.setDescription(jsonObject.getString("description"));
                            mListItem.add(itm);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } else {

                    Toast.makeText(context, htp.getErrorMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        if (mListItem != null) {
            progressBar.setVisibility(View.GONE);
            listview.setVisibility(View.VISIBLE);
            adapter = new ItemAdapter(mListItem, context);
            listview.setAdapter(adapter);
            adapter.notifyDataSetChanged();
            registerForContextMenu(listview);
        } else {
            progressBar.setVisibility(View.GONE);
            txtmen.setVisibility(View.VISIBLE);
            img.setVisibility(View.VISIBLE);
        }
    }
}


@Override
public boolean onContextItemSelected(MenuItem item) {
    final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
     final Item selectitem = (Item) adapter.getItem(info.position);

    switch (item.getItemId()){
        case R.id.supprimer:
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setMessage("Voulez vous supprimer cette tache" + " " + selectitem.getNomt()+" !")
            .setCancelable(false)
                    .setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {

                            mListItem.remove(selectitem);
                            adapter.notifyDataSetChanged();
                        }
                    })
                    .setNegativeButton("Non", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.cancel();
                        }
                    });
             AlertDialog alertDialog = builder.create();
            alertDialog.show();
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}