Android 如何从另一个片段更新片段的ListView?
在一个Android 如何从另一个片段更新片段的ListView?,android,android-fragments,android-listview,Android,Android Fragments,Android Listview,在一个片段发生在另一个片段内部的事件之后,如何与列表片段的视图进行通信 在列表片段(片段A)中,我有一个方法来刷新列表视图。但是,我还需要在点击片段中的按钮后刷新它,该片段是另一个片段的子片段(片段b) 它类似于FragmentA(listFragment)|FragmentB(detailview) (片段C-B的子片段) 如何操作?您可以通过另一个片段的标签访问该片段: // find your fragment YourFragment f = (YourFragment) getSu
片段
发生在另一个片段
内部的事件之后,如何与列表片段的视图
进行通信
在列表片段
(片段A)中,我有一个方法来刷新列表视图
。但是,我还需要在点击片段
中的按钮后刷新它,该片段是另一个片段
的子片段(片段b)
它类似于Fragment
A(listFragment)|Fragment
B(detailview)
(片段C-B的子片段)
如何操作?您可以通过另一个片段的标签访问该片段:
// find your fragment
YourFragment f = (YourFragment) getSupportFragmentManager().findFragmentByTag("yourFragTag");
// update the list view
f.updateListView();
片段的标记在附加到容器布局时设置:
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.frameBuy, YourFragment.newInstance(), "yourFragTag").commit();
因此,当您单击按钮
时,通过标签找到要刷新的片段
,然后调用刷新方法
如果您使用的是ViewPager
,以下是获取片段
标记的方法:
/**
* 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;
}
您可以通过几个简单的步骤来完成:
为组件创建侦听器接口,以侦听FragmentC中的按钮单击事件。例如:
公共接口碎片按钮Listener{
public void onButtonClicked();
}
在FragmentC中添加一个方法以允许侦听器注册。FragmentC将跟踪侦听器,并在单击按钮后立即调用侦听器回调。例如:
公共类FragmentC扩展了Fragment{
片段按钮Listener myListener;
公共无效注册表侦听器(FragmentCButtonListener侦听器){
myListener=监听器;
}
}
FragmentA应该实现FragmentCButtonListener接口,将自己注册为FragmentC的侦听器,并在收到FragmentC的回调时刷新列表视图。例如:
公共类FragmentC扩展片段实现FragementCButtonListener{
碎片C碎片C;
public void onCreate(){
fragment=新的FragmentC();
fragment.registerListener(本文件);
}
}
请注意,我假设FragmentA在样本中引用了FragmentC。如果不是,只需确保所有片段的容器类将自己注册为FragmentC的侦听器。容器类可以作为FragmentA在收到FragmentC的回调后更新listview。遵循以下步骤
我们有两个片段,分别称为AddFragment
和listframent
,在第一个片段上添加一个项目后,您希望更新的列表显示在列表片段上(这是什么魔法!!!)
步骤1:在AddFragment的类级别上使用另一个guy(ListFragment)将要实现的方法创建侦听器接口,并创建接口类型变量
public class AddFragment extends Fragment{
//listener varriable
//listener
public interface OnCategoryAddedListener{
public void refreshList();
}
private static OnCategoryAddedListener meAddListener;
}
步骤2:在同一AddFragment类的类级别上创建register方法并设置Listener变量
public class AddFragment extends Fragment{
public void registerListener(OnCategoryAddedListener listener)
{
meAddListener = listener;
}
}
步骤3:当任何事件发生时,点击按钮或对着你的应用程序大喊大叫(这在android中被视为粗鲁事件:-)检查listener对象MeadListener
变量并调用接口,
简而言之,莎士比亚的意思是:“”对于那些实现了ye接口并将该方法带到你的班级庇护所的人,我将给予你我最大的特权和祝福……”
ListFragment上的第4步实现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();
}
公共类ListFragment扩展片段实现AddFragment.onCategoryAddedListener{
//请参阅AddFragment
AddFragment AddFragment;
//一旦片段在内存范围内,就实例化AddFragment
//并使用AddFragment上下文注册侦听器,该上下文本质上实现OnCategoryAddedListener
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
categoryAddFragment=新categoryAddFragment();
registerListener(this);
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
填充列表();
}
公共无效填充列表(){
ArrayAdapter catArrayAdapter=新的ArrayAdapter(context,android.R.layout.simple_list_item_1,getItems());
setListAdapter(catArrayAdapter);
}
//你可以依靠le接口方法刷新你的列表内容
公共空刷新列表(){
填充列表();
}
享受java魔力在我的例子中,我将对列表片段的引用存储在一个全局变量中,并在任何地方使用它,只要确保在重新创建列表时,该变量都会更新为对listView的新引用。最好的方法是使用包含活动来处理通信。首先在Fragm中创建一个接口ent,在活动中实现它,并从活动中找到要与之共享信息的片段。然后使用片段的引用调用该方法以更新列表。
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();
}