2015-02-10 78 views
0

更改arrayList具有gridview,其設置的適配器使用arraylist的參數調用ImageAdapter。裏面的適配器有onclicklistener期間從arraylist一個項目被刪除,然後當我使用這一行ImageAdapter.notifyDataSetChanged在gridview項目被刪除。現在我需要在我的活動中更改arrayList,所以我怎麼能得到它。return從適配器android

這裏是我的代碼:

public class ImageAdapter extends BaseAdapter { 
Context context; 
ArrayList<String> listCheck = new ArrayList<String>(); 
ImageAdapter adapter = this; 

    public ImageAdapter(Context context, ArrayList<String> list) { 
    this.context = context; 
    listCheck = list; 
}  
    @Override 
public int getCount() { 
    return listCheck.size(); 
} 

    @Override 
public Object getItem(int arg0) { 
    return null; 
} 

    @Override 
public long getItemId(int arg0) { 
    return 0; 
} 

    @Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder121 holder; 
    if (convertView == null) { 
     convertView = LayoutInflater.from(context).inflate(   
     R.layout.item_gridmain, null); 
     holder = new ViewHolder121(); 
     holder.imageView = (ImageView) convertView 
        .findViewById(R.id.img_selected_image); 
     holder.close = (ImageButton) convertView 
        .findViewById(R.id.img_btn_cancel); 
     convertView.setTag(holder);  
} 

     else { 
     holder = (ViewHolder121) convertView.getTag(); 
    } 
    holder.close.setOnClickListener(new View.OnClickListener() {  
    public void onClick(View arg1) { 
       listCheck.remove(position); 
       adapter.notifyDataSetChanged(); 
} 
}); Bitmap bm = decodeSampledBitmapFromUri(listCheck.get(position), 220, 
       220); 
holder.imageView.setImageBitmap(bm);  
     return convertView; 
}  } 

片段代碼:

ImageAdapter mainActivityAdapter = new ImageAdapter(getActivity(), ar1);  
       gridview_withimage.setAdapter(mainActivityAdapter); 

問題:如何獲得改變的ArrayList從ImageAdapter到名爲Fragement

回答

6

如何獲得改變數組列表從ImageAdapter稱爲Fragement

創建ImageAdapter的方法,其將返回的ArrayList用作數據源在適配器:

public ArrayList<String> getModifyList() { 
    return listCheck; 
} 

呼叫getModifyList方法在片段用於使用適配器對象獲取的ArrayList:

gridview_withimage.setAdapter(mainActivityAdapter); 
gridview_withimage.postDelayed(new Runnable() { 

@Override 
    public void run() { 
// TODO Auto-generated method stub 
    ArrayList<String> arrNewList=mainActivityAdapter.getModifyList();   
    } 
}, 100); 
+0

我都試過,但我想這個函數返回清除按鈕 – Anitha 2015-02-10 12:15:52

+0

直接和簡單+1 – 2015-02-10 12:17:03

+0

@Anitha的ArrayList中的onclick:這裏是清除按鈕? – 2015-02-10 12:22:06

0

可以傳遞片段實例到適配器。

private Fragment fragment; 

public ImageAdapter(Context context, ArrayList<String> list,Fragment mfragment) { 
    this.context = context; 
    listCheck = list; 
    this.fragment=mfragment; 
} 

並在您的片段中創建一個公共方法並使用此片段片段實例調用;

0

可以在ImageAdapter

private ImageAdapterListener listener; 

public setListener(ImageAdapterListener listener){ 
this.listener = listener} 

覆蓋創建這樣

public interface ImageAdapterListener{ 
    void onListChange(List<String> list); 
} 

的接口,並宣佈其成員的notifyDataSetChanged

@Override 
void notifyDataSetChanged{ 
super.notifyDataSetChanged(); 
if(listener!= null) listener.onListChange(listCheck); 
} 

,使您的片段實現該接口。

class Myfragment extends Fragment implements ImageAdapterListener { 
ImageAdapter mainActivityAdapter = new ImageAdapter(getActivity(), ar1);  
       gridview_withimage.setAdapter(mainActivityAdapter); 
mainActivityAdapter.setListener(this); 

@Override 
void onListChange(List<String> list){ 
//do your stuff 
} 
    } 
+0

儘管它看起來安全和簡單,它是否會通過適配器中每次更改數據的列表? – CoolMind 2016-08-31 20:39:16

+0

如果在更新數據後總是調用notifyDataSetChanged,那麼是,否則不。這是一箇舊的答案,但我建議你應該檢查回收站視圖適配器的通知方法 – wrecker 2016-09-01 13:03:33

+0

謝謝,我使用了類似的解決方案與接口,但沒有notifyDataSetChanged,只是點擊按鈕。 – CoolMind 2016-09-01 14:12:29