2013-10-02 2 views
2

Я написал код для отображения изображений, кнопки & текстов динамически в ListView. Так что ListView загружает кнопку. Я хочу удалить выбранный элемент в ListView, нажав эту кнопку.Удалить элемент в ListView после нажатия кнопки удаления в ListView

класс Adapter:

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; 
    } 
} 

Это

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); 

Как сделать это ListView активность класса?

ответ

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 (от частных данных String [] до частных данных ArrayList). Это облегчит удаление предмета, который вы хотите удалить.

Удаление элемента из простого массива [] - это больше работы, вам в основном нужно создать новый массив и повторно заполнить элементы, которые нужно сохранить, вернуть новый массив. У него нет метода «удалить», например ArrayList. В классе адаптера также нет элемента «items», вам нужно манипулировать членом «data».

Затем измените подпись вашего конструктора адаптера на LazyAdapter (Activity a, ArrayList d). Измените строку «удалить» с items.remove (index.intValue()) до data.remove (position). Вам не нужно btn.setTag или v.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() вы помечать ListItem к постион

deleteButton.setTag(position); 

Преобразование GetTag() объекта к Integer

В OnClickListener() вы удалите пункт

items.remove(index.intValue()); 
Смежные вопросы