片段生命周期,我想只使用按钮点击刷新

时间:2016-09-19 04:18:31

标签: android android-fragments

CODE:

public class YellowFragment extends Fragment implements FlowerAdapter.FlowerClickListener{

    private RecyclerView mRecyclerView;

    private FlowerAdapter mFlowerAdapter;

    private Button mRefreshButton;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_yellow, container, false);

        mRefreshButton = (Button) view.findViewById(R.id.refreshbutton);
        mRefreshButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //I want this button for refresh, i want my fragment be refreshed when just through click this button.
            }
        });

        if (mFlowerApiService==null) {
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(Constants.HTTP.BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            mFlowerApiService = retrofit.create(FlowerApiService.class);
        }

        Call<List<Flower>> listCall = mRestManager.getmFlowerApiService(getActivity()).getAllFlowers();
        listCall.enqueue(new Callback<List<Flower>>() {
            @Override
            public void onResponse(Call<List<Flower>> call, Response<List<Flower>> response) {
                if (response.isSuccessful()) {

                    List<Flower> flowerList = response.body();
                    for(int i =0; i<flowerList.size(); i++) {
                        Flower flower = flowerList.get(i);
                        mFlowerAdapter.addFlower(flower);
                    }
                }
            }

            @Override
            public void onFailure(Call<List<Flower>> call, Throwable t) {
            }
        });
        return view;
    }

fragment_yellow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ddff00">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/refreshbutton" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_flower"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none" />
</LinearLayout>

我正在使用RecyclerView创建显示retrofit2的应用程序。

RecyclerView位于YellowFragment,但当我打开或点击YellowFragment时,RecyclerView会自动刷新。

我不希望这种方式令人耳目一新。

我想只通过点击按钮(mRefreshButton)来刷新。

我有另一个片段(BlueFragment),而BlueFragment YellowFragment显示数据(来自我的RESTapi,GridLayout的数据相同){{1} }。

正如您在上面的代码中看到的那样,YellowFragment会在LinearLayout中显示数据。

我希望这些BlueFragmentYellowFragment共享相同的数据。

因此我希望按钮联合参考。

也许我认为答案在FragmentLifecycle,我不知道解决问题的方法。这太难了。

问题

如何使用mRefreshButton刷新?

如何让BlueFragmentYellowFragment分享数据并同时刷新?

拜托,我等你的回答。

1 个答案:

答案 0 :(得分:1)

“如何使用mRefreshButton刷新?”

你可以有一个main方法,例如loadMyData()用于连接你的web服务并通过notifyDatasetChanged方法刷新你的适配器。你可以在你的onCreateView和mRefreshButton点击监听器上调用这个方法。

“如何让BlueFragment和YellowFragment共享数据并同时刷新?” 在您的活动中放置一个公共字段,例如:

public String mySharedString;

您可以通过以下方式从片段中读取和更改此数据:

((yourActivityName) getActivity()).mySharedString //do whatever you want