从主要活动中刷新片段

时间:2017-11-13 11:03:10

标签: android android-fragments searchview

我有一个Activity,其中包含三个标签和三个Fragments。首先Fragment显示歌曲标题列表,第二个标签显示所选歌曲。歌曲的细节来自数据库。 我正在实施SearchView功能,因此无论用户输入什么搜索文本,都只应在索引中显示这些歌曲。

这就像电话簿在我们设备中的工作方式一样。

enter image description here

我无法理解在搜索查询更改时如何刷新第一个Fragment。 我基本上都在寻找可以调用的方法来刷新第一个Fragment

2 个答案:

答案 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){}

度过美好的一天!