2015-02-10 65 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