0

私は持っていListViewます。私の問題は、アプリを終了せずにListViewアイテムを削除してからListViewもう一度新しいアイテムを追加すると、新しく追加されたアイテムが表示されるのではなくListView、削除されたアイテムが表示されることListViewです。アプリを終了してアプリを開くと、新しく追加されたアイテムが表示され、削除されたアイテムは表示されません。私はを使用しましたが、これは更新の問題に関連していnotifyDataSetChanged()ます。

なぜこれが起こるのか、私がこれを解決するのを手伝ってください。

    // This is on create of Activity 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();
    }
}
4

3 に答える 3

1

listItemを新しい値で更新してから、notifyDataSetChanged()を呼び出す必要があります。次のように

listItem.clear();           
listItem.addAll(ArrayList<String>);// put update ArrayList Value addAll() method
notifyDataSetChanged();
于 2012-06-18T06:54:08.107 に答える
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();
        }


    }
于 2012-06-18T09:47:52.017 に答える
0

ここで m_ItemCount は何ですか???

さらに、リストからデータを削除しているだけです。実際には、データの実際の位置からも削除します。リストが無効になるたびに以前のデータが保存されるため、実際の位置からも削除してください。

于 2012-06-18T08:51:03.293 に答える