我有一个Activity
,其中包含三个标签和三个Fragments
。首先Fragment
显示歌曲标题列表,第二个标签显示所选歌曲。歌曲的细节来自数据库。
我正在实施SearchView
功能,因此无论用户输入什么搜索文本,都只应在索引中显示这些歌曲。
这就像电话簿在我们设备中的工作方式一样。
我无法理解在搜索查询更改时如何刷新第一个Fragment
。
我基本上都在寻找可以调用的方法来刷新第一个Fragment
。
答案 0 :(得分:2)
根据@Prem的建议,我在这里得到了答案Android refresh a fragment list from its parent activity。对我来说非常好。
通过制作界面
可以实现<强> MainActivity.java 强>
public class MainActivity extends Activity {
public FragmentRefreshListener getFragmentRefreshListener() {
return fragmentRefreshListener;
}
public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) {
this.fragmentRefreshListener = fragmentRefreshListener;
}
private FragmentRefreshListener fragmentRefreshListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button)findViewById(R.id.btnRefreshFragment);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(getFragmentRefreshListener()!=null){
getFragmentRefreshListener().onRefresh();
}
}
});
}
public interface FragmentRefreshListener{
void onRefresh();
}}
<强> MyFragment.java 强>
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = null; // some view
/// Your Code
((MainActivity)getActivity()).setFragmentRefreshListener(new MainActivity.FragmentRefreshListener() {
@Override
public void onRefresh() {
// Refresh Your Fragment
}
});
return v;
}}
答案 1 :(得分:1)
下面是一种方法,你可以轻松地做到这一点。您只需要保存片段实例。就是这样。
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
private SparseArray<Fragment> array = new SparseArray<>();
ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
array.setValueAt(position, myFragment);
return myFragment;
}
@Override
public int getCount() {
return 3;
}
public SparseArray<Fragment> getFragmentArray() {
return array;
}
}
然后,从您的活动中,您可以轻松地从适配器实例中获取所有viewpager片段。
MyFragment fragment = (MyFragment) adapter.getFragmentArray().get(0); // get first fragment and casting it to your origin fragment
然后在该片段上创建一个方法。如下调用:
fragment.myFragmentMethod(String myData){}
度过美好的一天!