2015-03-24 3 views
2

Я разрабатываю приложение, которое содержит gridview. Я заполняю эту сетку специальным адаптером, содержащим изображение и текст.Android удаление элемента из gridview

adapter = new CustomGrid(this, titlearray, imageId); 
     grid=(GridView)findViewById(R.id.gridView1); 
      grid.setAdapter(adapter); 

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

Я попытался следующий код, я помещаю данные в новых массивах и загружать их в адаптер затем использовать их в сетке:

    String[] ntarray=new String[wcount];  
        Drawable[] ndarray=new Drawable[wcount]; 





       if(position==0) 
       { 
        for(int i=0;i<wcount;i++) 
        { 
         ntarray[i]=titlearray[i+1]; 
         ndarray[i]=imageId[i+1]; 
        } 
       } 


       if(position==wcount-1) 
       { 
        for(int i=0;i<wcount-1;i++) 
        { 
         ntarray[i]=titlearray[i]; 
         ndarray[i]=imageId[i]; 
        } 
       } 


       adapter = new CustomGrid(Wishlist.this, ntarray, ndarray); 
        grid.setAdapter(adapter); 
        adapter.notifyDataSetChanged(); 
        dialog.hide(); 

Я использую адаптер пользовательские сетки:

package com.erc.test; 

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
public class CustomGrid extends BaseAdapter{ 
    private Context mContext; 
    private final String[] web; 
    private final Drawable[] Imageid; 
     public CustomGrid(Context c,String[] web,Drawable[] imageId) { 
      mContext = c; 
      this.Imageid = imageId; 
      this.web = web; 
     } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return web.length; 
    } 
    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View grid; 
     LayoutInflater inflater = (LayoutInflater) mContext 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (convertView == null) { 
      grid = new View(mContext); 
     grid = inflater.inflate(R.layout.grid_single, null); 
      Button textView = (Button) grid.findViewById(R.id.grid_text); 
      ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image); 
      textView.setText(web[position]); 
      // textView.setShadowLayer(2, 1, 1, Color.BLACK); 
      imageView.setImageDrawable(Imageid[position]); 
      } else { 
      grid = (View) convertView; 
      } 
     return grid; 
    } 
} 

Есть ли какая-либо функция или какой-либо метод, который может помочь мне удалить этот элемент без создания нового адаптера, если да, как я могу добавить его в свой класс customgrid?

+0

Почему бы вам не добавить функцию remove() в свой список и не удалить этот список() из своего списка? Следующий вызов adapter.notifyDataSetChanged() в существующем адаптере, и он должен обновить/обновить – avk

+0

. Вы можете создать метод внутри пользовательского адаптера, который удалит элемент из * ntarray * и * ndarray *, после чего вы вызываете * notifyDataSetChanged(); * в обновите gridview. – Rami

+0

Я отредактировал вопрос, можете ли вы мне помочь –

ответ

5

сделать эти изменения:

ArrayList<String> ntarray= new ArrayList<String>();  
    ArrayList<Drawable> ndarray= new ArrayList<Drawable>(); 

    if(position==0){ 
     for(int i=0;i<wcount;i++){ 
      ntarray.set(i, titlearray[i+1]); 
      ndarray.set(i, imageId[i+1]); 
     } 
    } 

    if(position==wcount-1){ 
     for(int i=0;i<wcount-1;i++){ 
     ntarray.set(i, titlearray[i]); 
     ndarray.set(i, imageId[i]); 
     } 
    } 

    adapter = new CustomGrid(Wishlist.this, ntarray, ndarray); 
    grid.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
    dialog.hide(); 

и в адаптере:

public class CustomGrid extends BaseAdapter{ 
     private Context mContext; 
     private final ArrayList<String> web; 
     private final ArrayList<Drawable> Imageid; 

     public CustomGrid(Context c, ArrayList<String> web, ArrayList<Drawable> imageId) { 
       mContext = c; 
       this.Imageid = imageId; 
       this.web = web; 
      } 

     public void removeItem(int position){ 
      web.remove(position); 
      Imageid.remove(position); 
      notifyDataSetChanged(); 
     } 

    .... 
    } 

и когда вы хотите, чтобы удалить элемент в GridView, просто позвоните: adapter.removeItem(TheItemPosition);

Update

Вы можете добавить t его метод в вашем адаптере, чтобы удалить все предметы:

public void clearData(){ 
     web.clear(); 
     Imageid.clear(); 
     notifyDataSetChanged(); 
} 
+0

Thumbs up @Rami Благодарим вас: D –

+0

Добро пожаловать :) – Rami

+0

еще один вопрос, как я могу очистить все элементы от адаптера? –

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