我实施了下图中描述的情况:
问题是:
当我更新 GridView 1 时,我必须更新 gridView 2 ,这是最好的方法吗?我可以通过执行新的Volley请求仅在其 Adapter 中更新 GridView 2 ,也许我可以通过在 Fragment 2中重新设置适配器来实现此目的/ em>,我可以在 Adapter GridView 1 中使用对 Fragment 2 的引用吗?
详细信息: GridView 1 由适配器本身的Volley请求后执行的 Adapter 上的 notifyDataSetChanged()更新。我无法使用 Fragment 2 的 onResume()方法,因为它没有被调用,因为它显示的是同一个片段时间片段1 。
任何想法?
感谢。
答案 0 :(得分:3)
侦听器只是JAVA中的一个接口。因此,您无法创建界面对象("新"运算符)
1)创建一个界面
public Interface OnUpdateGridView2Listener{
public void onUpdate() //Add the kind of data you want in the parameters
}
2)在gridView1的适配器中创建接口的成员并调用其方法
public GidViewAdapter1 extends Adapter{
private OnUpdateGridView2Listener myListener;
//Your code
@Override
public void notifyDataSetChanged(){
//Your code
myListener.onUpdate();
}
public void setOnUpdateGridView2Listener(OnUpdateGridView2Listener list){
this.myListener = list;
}
}
3)在片段中实现接口并通知适配器
public FragmentGridView2 extends Fragment implements OnUpdateGridView2Listener{
@Override
public void onUpdate(){
//Your code
gridView2Adapter.notifyDataSetChanged();
}
}
4)在您的活动中,在创建fragmentGridView1
时设置侦听器public YourActivity{
//Your code
FragmentGridView1 fragment = new FragmentGridView1();
fragment.setOnUpdateGridView2Listener(getApplication());
}
答案 1 :(得分:1)
您可以尝试实现这样的Listener模式:
FragmentTab2 {
private interface DataListener {
public Data getData();
}
private DataListener dataListener = new DataListener();
Data = dataListener.getData();
}
FragmentTab1 implements DataListener {
@Override
public Data getData() {
return Data;
}
}
如果您需要通知,注册和取消注册听众,请参阅此处:Observer Design Pattern