如何从另一个片段更新片段的Lis​​tView?

时间:2014-03-13 17:18:25

标签: android android-fragments android-listview

如果在listview内发生ListFragmentFragment内的Fragment,我如何与ListFragment进行通信?

ListView(片段A)中,我有一种刷新Button的方法。但是,我需要在Fragment内点击Fragment之后刷新它,这是另一个Fragment的孩子(片段b)

它像Fragment A(listFragment)| {{1}} B(详细视图)                                     (片段C - B的子片段)

我该怎么做?

3 个答案:

答案 0 :(得分:5)

您可以通过标记

访问其他Fragment
 // find your fragment
 YourFragment f = (YourFragment) getSupportFragmentManager().findFragmentByTag("yourFragTag");

 // update the list view
 f.updateListView(); 

Fragment的标记在附加到容器布局时设置:

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.frameBuy, YourFragment.newInstance(), "yourFragTag").commit();

因此,当您点击Button时,找到要按其标记刷新的Fragment,然后调用您的刷新方法。

如果您使用ViewPager,则可以获取Fragments标记:

   /**
     * Gets the fragment tag of a fragment at a specific position in the viewpager.
     *
     * @param pos the pos
     * @return the fragment tag
     */
    public String getFragmentTag(int pos){
        return "android:switcher:"+R.id.yourViewPagerId+":"+pos;
    }

答案 1 :(得分:0)

您可以通过几个简单的步骤来完成:

  1. 为组件创建一个侦听器接口,以侦听FragmentC中的按钮单击事件。例如:

    public interface FragmentCButtonListener {     public void onButtonClicked(); }

  2. 在FragmentC中添加一个方法以允许侦听器注册。 FragmentC将跟踪监听器,并在单击按钮后立即调用监听器回调。例如:

    公共类FragmentC扩展Fragment {      FragmentCButtonListener myListener;      public void registerListener(FragmentCButtonListener listener){          myListener = listener;      } }

  3. FragmentA应该实现FragmentCButtonListener接口,将自己注册为FragmentC的监听器,并在收到FragmentC的回调时刷新列表视图。例如:

    public class FragmentC extends Fragment实现FragementCButtonListener {     FragmentC fragmentC;     public void onCreate(){         fragment = new FragmentC();         fragment.registerListener(this);     }

    public void onButtonClicked() {
        //refresh the list view
    }
    

    }

  4. 请注意,我假设FragmentA在样本中引用了FragmentC。如果没有,只需确保所有片段的容器类将自己注册为FragmentC的侦听器。一旦收到FragmentC的回调,容器类就可以像FragmentA一样更新listview。

答案 2 :(得分:0)

按照以下步骤操作 我们有两个名为AddFragmentListFragment的片段,并且在第一个片段上添加一个项目时,您希望更新的列表显示在列表片段上(这是什么类型的巫术!!!)。

步骤1在AddFragment的类级别上创建一个侦听器接口,该方法将由另一个人(ListFragment)实现并创建接口类型变量

public class AddFragment extends Fragment{
 //listener varriable

 //listener
  public interface OnCategoryAddedListener{
    public void refreshList();
}
 private static OnCategoryAddedListener meAddListener;
}

步骤2在同一个AddFragment类的类级别创建register方法并设置listenter变量

public class AddFragment extends Fragment{


public void registerListener(OnCategoryAddedListener listener)
{
    meAddListener = listener;
}
}

第3步任何事件cud按钮点击或在你的应用程序大喊大叫(在android :-)中被认为是粗鲁事件)检查监听器对象meAddListener变量并调用接口,  在莎士比亚的简言之,它意味着“for thou who implement ye interface and brought the method within ur class shelter, I shall give u my utmost privilege and blessing to …. ”

步骤4在ListFragment上实现AddFragment的界面,没有回头就去实现它的方法。在该方法中,你只需调用abracadabra来重新填充你的列表或任何类型的可更新的android视图对象......并且你已经完成了

public class ListFragment extends Fragment implements AddFragment.OnCattegoryAddedListener{
//refer to AddFragment
AddFragment addFragment;

//once the fragment is within the memory scope u instantiate AddFragment
//and register listener with AddFragment context which inherently implement OnCategoryAddedListener

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        categoryAddFragment = new CategoryAddFragment();
        categoryAddFragment.registerListener(this);

    }

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    fillList();

}

public void fillList() {

    ArrayAdapter<String>   catArrayAdapter = new ArrayAdapter<>(context,android.R.layout.simple_list_item_1,getItems());
    setListAdapter(catArrayAdapter);

}
//le interface method u can count on to refresh ur list content
public void refreshList(){
fillList();
}

check this out for a little more 享受java魔术