通过适配器通信到notifyDataSetChanged()

时间:2014-11-03 10:33:56

标签: android gridview android-fragments

我实施了下图中描述的情况:

enter image description here

问题是:

当我更新 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

任何想法?

感谢。

2 个答案:

答案 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