如果在listview
内发生ListFragment
个Fragment
内的Fragment
,我如何与ListFragment
进行通信?
在ListView
(片段A)中,我有一种刷新Button
的方法。但是,我需要在Fragment
内点击Fragment
之后刷新它,这是另一个Fragment
的孩子(片段b)
它像Fragment
A(listFragment)| {{1}} B(详细视图)
(片段C - B的子片段)
我该怎么做?
答案 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)
您可以通过几个简单的步骤来完成:
为组件创建一个侦听器接口,以侦听FragmentC中的按钮单击事件。例如:
public interface FragmentCButtonListener { public void onButtonClicked(); }
在FragmentC中添加一个方法以允许侦听器注册。 FragmentC将跟踪监听器,并在单击按钮后立即调用监听器回调。例如:
公共类FragmentC扩展Fragment { FragmentCButtonListener myListener; public void registerListener(FragmentCButtonListener listener){ myListener = listener; } }
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
}
}
请注意,我假设FragmentA在样本中引用了FragmentC。如果没有,只需确保所有片段的容器类将自己注册为FragmentC的侦听器。一旦收到FragmentC的回调,容器类就可以像FragmentA一样更新listview。
答案 2 :(得分:0)
按照以下步骤操作
我们有两个名为AddFragment
和ListFragment
的片段,并且在第一个片段上添加一个项目时,您希望更新的列表显示在列表片段上(这是什么类型的巫术!!!)。
步骤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魔术