Frage

I want to delete items from a list when the user makes a long click on it and refresh the list.

When I use this code, it delete the item but don't refresh the list:

codeListView.setOnItemLongClickListener (new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        String sqlite_id = ((TextView) view.findViewById(R.id.code_id)).getText().toString();
        int sql_id = Integer.valueOf(sqlite_id.toString());
        if(fav == false){
            db.saveFav(sql_id);
            text = "Zu den Favoriten hinzugefügt!";
        }else{
            db.delFav(sql_id);
            text = "Aus den Favoriten gelöscht!";
            CustomAdapterCode adapter_code = (CustomAdapterCode)codeListView.getAdapter();
            adapter_code.notifyDataSetChanged();
        }
        Context context = getApplicationContext();
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
        return true;
    }
});

Now I found this Android how to delete items from list with longclicklistener on stackoverflow, but my code doesn't work:

codeListView.setOnItemLongClickListener (new OnItemLongClickListener() {
    @Override
    public void onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        String sqlite_id = ((TextView) view.findViewById(R.id.code_id)).getText().toString();
        int sql_id = Integer.valueOf(sqlite_id.toString());
        if(fav == false){
            db.saveFav(sql_id);
            text = "Zu den Favoriten hinzugefügt!";
        }else{
            db.delFav(sql_id);
            text = "Aus den Favoriten gelöscht!";
            CustomAdapterCode adapter_code = (CustomAdapterCode)codeListView.getAdapter();
            adapter_code.notifyDataSetChanged();
        }
        Context context = getApplicationContext();
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();               
    }
});

CustomAdapter:

private class CustomAdapterCode extends ArrayAdapter<HashMap<String, Object>>{
    public CustomAdapterCode(Context context, int textViewResourceId, ArrayList<HashMap<String, Object>> Strings) {
        super(context, textViewResourceId, Strings);
    }
    private class ViewHolder{
        TextView code_id, code_layout, name_layout, prio1, prio2, prio3;
    }

    ViewHolder viewHolder;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView==null){        
            convertView = inflater.inflate(R.layout.code_list_item, parent, false);
            viewHolder=new ViewHolder();

            viewHolder.code_id=(TextView) convertView.findViewById(R.id.code_id);
            viewHolder.code_layout=(TextView) convertView.findViewById(R.id.code_layout);
            viewHolder.name_layout=(TextView) convertView.findViewById(R.id.name_layout);
            viewHolder.prio1=(TextView) convertView.findViewById(R.id.prio1);
            viewHolder.prio2=(TextView) convertView.findViewById(R.id.prio2);
            viewHolder.prio3=(TextView) convertView.findViewById(R.id.prio3);

            convertView.setTag(viewHolder);

        }else{
            viewHolder=(ViewHolder) convertView.getTag();
        }

        viewHolder.code_id.setText(codeList.get(position).get("_id").toString());
        viewHolder.code_layout.setText(codeList.get(position).get("code").toString());
        viewHolder.name_layout.setText(codeList.get(position).get("name").toString());
        viewHolder.prio1.setText(codeList.get(position).get("prio1").toString());
        viewHolder.prio2.setText(codeList.get(position).get("prio2").toString());
        viewHolder.prio3.setText(codeList.get(position).get("prio3").toString());


        return convertView;
    }
}   

Eclipse says:

Multiple markers at this line

  • implements android.widget.AdapterView.OnItemLongClickListener.onItemLongClick
  • The return type is incompatible with AdapterView.OnItemLongClickListener.onItemLongClick(AdapterView, View, int, long)
War es hilfreich?

Lösung

I found the problem, I forgot to remove the item from the ArrayList which I use to build the ListView:

codeList.remove(position);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top