2012-06-18 3 views
0

У меня есть ListView. Проблема в моем ListView заключается в том, что когда я удаляю элемент из своего ListView и снова добавляю новый элемент в ListView, не выходя из приложения, он показывает удаленный элемент в моем ListView вместо того, чтобы показывать вновь добавленный элемент. Как только я выйду из приложения и откройте приложение показывает вновь добавленный элемент и не показывает удаленный элемент. Это связано с проблемой обновления, хотя я использовал notifyDataSetChanged().Удалить элемент снова появляется в виде списка

Почему это происходит, помогите мне решить эту проблему.

// This is on create of Avtivity Class 
    ArrayList<String> fileStrings = new ArrayList<String>(m_ItemCount);  
    for (int i = 0; i < m_ItemCount; i++) 
    { 
     fileStrings.add(NoteManager.getSingletonObject().getImageName(i)); 

     if(NoteManager.getSingletonObject().getStatusArray(i) == 1) 
     { 
      m_CompletedItemCount++;  
     } 
    } 

    // Call ListViewAdapter class that extend BaseAdapter class inside the method setListAdapter 
    // Display all the items in the list view 
    m_Adapter = new ListViewAdapter(this, fileStrings); 
    setListAdapter(m_Adapter);  
    listView = getListView(); 

// Adapter Class 

public class ListViewAdapter extends BaseAdapter 
{ 
    private Activity activity; 
    private ArrayList<String> listItem; 
    private LayoutInflater inflater=null; 

    public ListViewAdapter(Activity a, ArrayList<String> d) 
    { 
     activity = a; 
     listItem = d; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public int getCount() 
    { 
     return listItem.size(); 
    } 

    public Object getItem(int position) 
    { 
     return position; 
    } 

    public long getItemId(int position) 
    { 
     return position; 
    } 

    public class ViewHolder 
    { 
     Button butDelete, butAdd; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     ViewHolder holder; 

     if(convertView == null) 
     { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.list_item, null); 
      holder.butDelete = (Button)convertView.findViewById(R.id.but_delete); 
      holder.butAdd = (Button)convertView.findViewById(R.id.but_delete); 
      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder)convertView.getTag(); 
     } 

     // Delete item on click of delete item 
     holder.butDelete.setOnClickListener(new OnClickListener() 
     {   
      @Override 
      public void onClick(View v) 
      {    
       deleteItem(position); 
      } 
     }); 

     holder.butAdd.setOnClickListener(new OnClickListener() 
     {   
      @Override 
      public void onClick(View v) 
      {    
       addItem(name); 
      } 
     }); 

     return convertView; 
    } 

    // Add item in listView 
    public void addItem(String stringName) 
    { 
     listItem.add(0, stringName); 
     notifyDataSetChanged(); 
    } 

    // delete item in listView 
    public void deleteItem(int position) 
    { 
     listItem.remove(position); 
     notifyDataSetChanged(); 
    } 
} 

ответ

1

необходимо обновить listItem новыми значениями, а затем вызвать notifyDataSetChanged(); как указано ниже

listItem.clear();   
listItem.addAll(ArrayList<String>);// put update ArrayList Value addAll() method 
notifyDataSetChanged(); 
+0

Нет его не working..instead он добавил два элемента каждый раз, когда я wnat, чтобы добавить новый элемент – AndroidDev

0

Что такое m_ItemCount здесь ???

Кроме того, вы просто удаляете данные из списка. Фактически, также удаляйте его из фактической позиции данных. Поскольку каждый раз, когда ваш список становится недействительным, он получает предыдущие данные, поэтому удаляет их и из фактической позиции.

+0

Фактически перед отображением элемента в listView i сохраняет элемент в массиве и в это время я увеличиваю значение ItemCount, поэтому itemcount - это нет элемента, присутствующего в массиве. После этого во время отображения списка я получаю каждый элемент из массива и сохраняюсь в ArrayList и передаю этот ArrayList классу адаптера. Yeh я удаляю элемент из массива, удаляя элемент из списка. – AndroidDev

+0

Это работает ???? если нет почтового кода удаления данных из arraylist – Androiduser

+0

Удаление данных из массиваList означает, какой массивList, тот, который я объявил в начале. – AndroidDev

0

Используйте этот код в соответствии с вашими требованиями, поскольку он не работает для меня:

  int m_ItemCount=10; 
     @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main1); 

     ListView listView; 
     ArrayList<String> fileStrings = new ArrayList<String>(m_ItemCount);  
     for (int i = 0; i < m_ItemCount; i++) 
     { 
      fileStrings.add(i+""); 

      /*if(NoteManager.getSingletonObject().getStatusArray(i) == 1) 
      { 
       m_CompletedItemCount++;  
      }*/ 
     } 

     // Call ListViewAdapter class that extend BaseAdapter class inside the method setListAdapter 
     // Display all the items in the list view 
     ListViewAdapter m_Adapter = new ListViewAdapter(this, fileStrings); 
     setListAdapter(m_Adapter);  
     listView = getListView(); 

    // Adapter Class 
} 
    class ListViewAdapter extends BaseAdapter 
    { 
     private Activity activity; 
     private ArrayList<String> listItem; 
     private LayoutInflater inflater=null; 

     public ListViewAdapter(Activity a, ArrayList<String> d) 
     { 
      activity = a; 
      listItem = d; 
      inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     public int getCount() 
     { 
      return listItem.size(); 
     } 

     public Object getItem(int position) 
     { 
      return position; 
     } 

     public long getItemId(int position) 
     { 
      return position; 
     } 

     public class ViewHolder 
     { 
      Button butDelete, butAdd; 
     } 

     public View getView(final int position, View convertView, ViewGroup parent) 
     { 
      ViewHolder holder; 

      if(convertView == null) 
      { 
       holder = new ViewHolder(); 
       convertView = inflater.inflate(R.layout.item, null); 
       holder.butDelete = (Button)convertView.findViewById(R.id.but_delete); 
       holder.butAdd = (Button)convertView.findViewById(R.id.but_add); 
       convertView.setTag(holder); 
      } 
      else 
      { 
       holder = (ViewHolder)convertView.getTag(); 
      } 

      // Delete item on click of delete item 
      holder.butDelete.setOnClickListener(new OnClickListener() 
      {   
       @Override 
       public void onClick(View v) 
       {    
        deleteItem(position); 
       } 
      }); 

      holder.butAdd.setOnClickListener(new OnClickListener() 
      {   
       @Override 
       public void onClick(View v) 
       {    
        addItem("AA"); 
       } 
      }); 

      return convertView; 
     } 

     // Add item in listView 
     public void addItem(String stringName) 
     { 
      listItem.add(0, stringName); 
      notifyDataSetChanged(); 
     } 

     // delete item in listView 
     public void deleteItem(int position) 
     { 
      listItem.remove(position); 
      notifyDataSetChanged(); 
     } 


    } 
Смежные вопросы