从 mainactivity 刷新一个片段
Refresh a Fragment from mainactivity
我有一个 Activity
,其中包含三个选项卡和三个 Fragments
。第一个 Fragment
显示歌曲标题列表,第二个选项卡显示所选歌曲。歌曲的详细信息来自数据库。
我正在实现 SearchView
功能,这样无论用户输入什么搜索文本,索引中都应该只显示那些歌曲。
这与 phone 图书在我们设备中的工作方式完全相同。
我无法理解如何在搜索查询更改时刷新第一个 Fragment
。
我基本上是在寻找可以调用以刷新第一个 Fragment
.
的方法
下面是一种方法,您可以轻松做到。您只需要保存片段实例。就这些了。
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;
}
}
然后从您的 activity,您可以轻松地从适配器实例中获取所有 viewpager 片段。
MyFragment fragment = (MyFragment) adapter.getFragmentArray().get(0); // get first fragment and casting it to your origin fragment
然后在该片段上创建一个方法。调用如下:
fragment.myFragmentMethod(String myData){}
祝你有愉快的一天!
根据@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;
}}
我有一个 Activity
,其中包含三个选项卡和三个 Fragments
。第一个 Fragment
显示歌曲标题列表,第二个选项卡显示所选歌曲。歌曲的详细信息来自数据库。
我正在实现 SearchView
功能,这样无论用户输入什么搜索文本,索引中都应该只显示那些歌曲。
这与 phone 图书在我们设备中的工作方式完全相同。
我无法理解如何在搜索查询更改时刷新第一个 Fragment
。
我基本上是在寻找可以调用以刷新第一个 Fragment
.
下面是一种方法,您可以轻松做到。您只需要保存片段实例。就这些了。
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;
}
}
然后从您的 activity,您可以轻松地从适配器实例中获取所有 viewpager 片段。
MyFragment fragment = (MyFragment) adapter.getFragmentArray().get(0); // get first fragment and casting it to your origin fragment
然后在该片段上创建一个方法。调用如下:
fragment.myFragmentMethod(String myData){}
祝你有愉快的一天!
根据@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;
}}