2014-10-14 2 views
2

Я знаю, что есть много вопросов переполнения стека, разрешенных для моей проблемы. Я пробовал большинство решений, но мне не удалось.Неверная строка удалена из списка Android android

Я пытаюсь реализовать listrow удаление listview.On longclick извещения listrow будет всплывать, где есть два варианта удаления и отмены. Когда удаляется нажатие, эта строка будет удалена в пользовательском адаптере, а также строка в таблице mysql используя асинхронную задачу. Но удаляется только последняя строка.

Я установил notifyDataSetChanged() моему адаптеру. Даже тогда это не работает нормально.

Это мой код:

 listView.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int position, long arg3) { 
      System.out.println("postition value::" + position); 
      removeItemFromList(position); 

      return true; 
     } 
    }); 


    protected void removeItemFromList(int position) { 
    final int deletePosition = position; 
    System.out.println("deleting postition::"+deletePosition); 
    AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); 

    alert.setTitle("Delete"); 
    alert.setMessage("Do you want delete this item?"); 
    alert.setPositiveButton("YES", new OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TOD O Auto-generated method stub 

      // main code on after clicking yes 
      new removefromfav().execute(); 
      courselist.remove(deletePosition); 
     // dataAdapter.remove(dataAdapter.getItem(deletePosition)); 
      dataAdapter.notifyDataSetChanged(); 
      listView.setAdapter(dataAdapter); 
     // dataAdapter.notifyDataSetInvalidated(); 

     } 
    }); 
    alert.setNegativeButton("CANCEL", new OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      dialog.dismiss(); 
     } 
    }); 

    alert.show(); 

} 

Мой адаптер класса,

private class MyCustomAdapter extends ArrayAdapter<Course> { 

    private ArrayList<Course> countryList; 

    public MyCustomAdapter(Context context, int textViewResourceId, 
      ArrayList<Course> countryList) { 
     super(context, textViewResourceId, countryList); 
     this.countryList = new ArrayList<Course>(); 
     this.countryList.addAll(countryList); 
    } 

    private class ViewHolder { 
     TextView code; 
     TextView name; 
     ImageView cover; 
     TextView cost; 
     ImageView ratingshow; 
     ImageView promoimage; 
     TextView enroll; 
    } 

    public void add(Course country) { 

     this.countryList.add(country); 
    } 

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

     ViewHolder holder = null; 

     if (convertView == null) { 

      LayoutInflater vi = (LayoutInflater) getActivity() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = vi.inflate(R.layout.course_overview, null); 

      holder = new ViewHolder(); 
      holder.code = (TextView) convertView 
        .findViewById(R.id.coursename); 
      holder.name = (TextView) convertView.findViewById(R.id.author); 
      holder.cost = (TextView) convertView.findViewById(R.id.cost); 
      holder.cover = (ImageView) convertView.findViewById(R.id.cover); 
      holder.ratingshow = (ImageView) convertView 
        .findViewById(R.id.ratingimage); 
      holder.promoimage = (ImageView) convertView 
        .findViewById(R.id.promoimage); 
      holder.enroll = (TextView) convertView 
        .findViewById(R.id.enroll); 
      convertView.setTag(holder); 

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

     Course country = this.countryList.get(position); 
     holder.code.setText(country.getCode()); 
     holder.name.setText(country.getName()); 
     holder.cost.setText("$ " + country.getRegion()); 
     holder.cover.setImageBitmap(country.getBitmap()); 




     return convertView; 

    } 

} 

Любой человек может помочь мне ???

+0

Добавили ли вы footview или headerview в свой список? –

+0

yes Я добавил footerview – micky

+0

что это новый removefromfav(). Execute(); ? –

ответ

0

Хорошо, что я могу помочь вам, вы добавите еще одну функцию на вашем пользовательском адаптере

public void removeElementAtPosition(int position){ 
     this.countryList.remove(position); 
     notifyDataSetChanged(); 
    } 

и удалите y наш адаптер в вашей функции с длинным щелчком, например

dataAdapter.removeElementAtPosition(position); 

Вы не хотите обновлять наш адаптер еще раз. И вы будете проверять и избежать исключения нулевого указателя

Все адаптеры будут работать с этой функцией

public int getCount(){ 
    this.countryList.size();   
} 

так, то это повлияет на список в этом адаптере список ваш товар будет уменьшить, если вы проверяете с этим GetCount функция БАЗА ADAPTER

http://developer.android.com/reference/android/widget/BaseAdapter.html

Все самое лучшее ..

+0

ok я проверил и дам вам знать – micky

+0

да спасибо !!!Это работает для меня ... Не могли бы вы объяснить это? – micky

1

Вы ничего не удалителите от countryList в MyCustomAdapter. Я вижу функцию, в которой вы добавляете материал, но я не вижу, чтобы кто-то удалял вещи.

Добавить функцию, чтобы удалить элементы из countryList:

private class MyCustomAdapter extends ArrayAdapter<Course> { 

private ArrayList<Course> countryList; 

public MyCustomAdapter(Context context, int textViewResourceId, 
     ArrayList<Course> countryList) { 
    super(context, textViewResourceId, countryList); 
    this.countryList = new ArrayList<Course>(); 
    this.countryList.addAll(countryList); 
} 

private class ViewHolder { 
    TextView code; 
    TextView name; 
    ImageView cover; 
    TextView cost; 
    ImageView ratingshow; 
    ImageView promoimage; 
    TextView enroll; 
} 

public void add(Course country) { 

    this.countryList.add(country); 
} 

//ADD THIS FUNCTION 
public void remove(int index) { 
    this.countryList.remove(index) 
} 

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

    ViewHolder holder = null; 

    if (convertView == null) { 

     LayoutInflater vi = (LayoutInflater) getActivity() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = vi.inflate(R.layout.course_overview, null); 

     holder = new ViewHolder(); 
     holder.code = (TextView) convertView 
       .findViewById(R.id.coursename); 
     holder.name = (TextView) convertView.findViewById(R.id.author); 
     holder.cost = (TextView) convertView.findViewById(R.id.cost); 
     holder.cover = (ImageView) convertView.findViewById(R.id.cover); 
     holder.ratingshow = (ImageView) convertView 
       .findViewById(R.id.ratingimage); 
     holder.promoimage = (ImageView) convertView 
       .findViewById(R.id.promoimage); 
     holder.enroll = (TextView) convertView 
       .findViewById(R.id.enroll); 
     convertView.setTag(holder); 

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

    Course country = this.countryList.get(position); 
    holder.code.setText(country.getCode()); 
    holder.name.setText(country.getName()); 
    holder.cost.setText("$ " + country.getRegion()); 
    holder.cover.setImageBitmap(country.getBitmap()); 




    return convertView; 

} 
} 

И называют это в onClick дозвона диалог

public void onClick(DialogInterface dialog, int which) { 
     // TOD O Auto-generated method stub 

     // main code on after clicking yes 
     new removefromfav().execute(); 
     dataAdapter.remove(which); 
     dataAdapter.notifyDataSetChanged(); 

    } 
+0

спасибо 0xdeadcode !! – micky

+0

Добро пожаловать. Подумайте над своим ответом, если это было полезно для вас. – 0xDEADC0DE