2013-10-02 152 views
2

我寫了一個代碼來顯示圖像,在ListView中動態地按下&文本。 因此,ListView加載按鈕。我想通過單擊此按鈕來刪除ListView中的選定項目。在ListView上點擊刪除按鈕後在ListView上刪除項目

適配器類:

public class LazyAdapter extends BaseAdapter { 

    private Activity activity; 
    private String[] data; 
    private static LayoutInflater inflater=null; 
    public ImageLoaderLogoUnder imageLoader; 

    public LazyAdapter(Activity a, String[] d) { 
     activity = a; 
     data=d; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoaderLogoUnder(activity.getApplicationContext()); 
    } 

    public int getCount() { 
     return data.length; 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     if(convertView==null) 
      vi = inflater.inflate(R.layout.inflatelistview, null); 

     TextView text=(TextView)vi.findViewById(R.id.textView1); 
     ImageView image=(ImageView)vi.findViewById(R.id.imageView1); 
     Button btn=(Button)vi.findViewById(R.id.button1); 
     btn.setTag(position); 
     btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Integer index = (Integer) v.getTag(); 
       //items.remove(index.intValue()); 
       notifyDataSetChanged(); 

      } 
     }); 
     text.setText("item "+position); 
     imageLoader.DisplayImage(data[position], image); 
     return vi; 
    } 
} 

這是一個ListView Activity類

ShowData show = new ShowData(); 

     String s[] = show.getData(); 
     adapter = new LazyAdapter(this, s); 

     inflater = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     list = (ListView) findViewById(R.id.listView1); 
     list.setAdapter(adapter); 

如何做到這一點?

回答

8

您可以嘗試使用ArrayList代替如下:

public class LazyAdapter extends BaseAdapter { 

private Activity activity; 
private ArrayList<String> data; 
private static LayoutInflater inflater=null; 
public ImageLoaderLogoUnder imageLoader; 

public LazyAdapter(Activity a, ArrayList<String> d) { 
    activity = a; 
    data=d; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoaderLogoUnder(activity.getApplicationContext()); 
} 

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

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

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

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.inflatelistview, null); 

    TextView text=(TextView)vi.findViewById(R.id.textView1); 
    ImageView image=(ImageView)vi.findViewById(R.id.imageView1); 
    Button btn=(Button)vi.findViewById(R.id.button1); 
    btn.setTag(position); 
    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Integer index = (Integer) v.getTag(); 
      //items.remove(index.intValue()); 
      data.remove(position); 
      notifyDataSetChanged(); 

     } 
    }); 
    text.setText("item "+position); 
    imageLoader.DisplayImage(data.get(position), image); 
    return vi; 
} 
} 
1
  1. 從「數據」中刪除項目。
  2. 調用adapter.notifyDataSetChanged()
1

你在onclick聽衆註釋掉的部分看起來像你幾乎沒有。我會將數據d元素的類型從字符串數組更改爲ArrayList(從private String [] data to private ArrayList data)。這將使你更容易去除物品。

從簡單的[]數組中刪除一個項目是更多的工作,你基本上必須創建一個新的數組並重新填充要保留的項目,返回新的數組。它沒有像ArrayList那樣的「刪除」方法。適配器類也沒有「項目」成員,您必須操作「數據」成員。

然後將您的適配器構造函數的簽名更改爲LazyAdapter(Activity a,ArrayList d)。將您的「刪除」行從items.remove(index.intValue())更改爲data.remove(position)。您不需要btn.setTagv.getTag由於位置已經可用。對NotifyDataSetChanged()的調用將刷新列表視圖。

不同的構造函數將意味着你需要發送一個ArrayList到你的適配器。 Show.getData()將需要更改爲返回一個ArrayList,s的類型將需要從String []更改爲ArrayList。

這與給出的答案基本相同,稍微冗長些。希望它可以幫助...

0
@Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View row = null; 
     LayoutInflater inflater = getLayoutInflater(); 

     row = inflater.inflate(R.layout.one_result_details_row, parent, false); 

     // inflate other items here : 
     Button deleteButton = (Button) row.findViewById(R.id.Details_Button01); 
     deleteButton.setTag(position); 

     deleteButton.setOnClickListener(
      new Button.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Integer index = (Integer) view.getTag(); 
        items.remove(index.intValue()); 
        notifyDataSetChanged(); 
       } 
      } 
     ); 

在getView()方法,你標記的列表項到現在的位置

deleteButton.setTag(position); 

轉換的getTag()對象爲一個整數

在OnClickListener()您隨後刪除商品

items.remove(index.intValue());