viewModel與recyclerView結合

1,創建detailViewmodel

package com.example.test10;

import androidx.lifecycle.ViewModel;

import java.util.ArrayList;
import java.util.List;

public class DetailViewModel extends ViewModel {
    List<User> userViewModel = new ArrayList<>();
}

2,在使用的時候

注意:

如果是getActivity(),全局保存狀態,如果是this,保存在當前fragment中

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        detailViewModel = ViewModelProviders.of(getActivity()).get(DetailViewModel.class);
    }

 在頁面開始的時候,把數據給頁面

/**
     * 在onStart中使用,不然找不到
     */
    @Override
    public void onStart() {
        super.onStart();
        list = detailViewModel.userViewModel;
        myAdapter = new MyAdapter(list);
        recyclerView.setAdapter(myAdapter);
        //使用垂直佈局來實現
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    }

 請求的時候也要給viewmodel保存

private void getdata() {
        Log.i(TAG, "開始請求! ");
        OkHttpClient okHttpClient = new okHttp().getOkHttpClient();
        String url = "http://192.168.1.126:8001/user/listUser";
        final Request request = new Request.Builder().url(url).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Log.e(TAG, "請求失敗! ");
                e.printStackTrace();
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) {
                if (response.isSuccessful()) {
                    try {
                        String res = Objects.requireNonNull(response.body()).string();
                        JSONObject jsonObject = JSON.parseObject(res);
                        Log.i(TAG, "onResponse: "+jsonObject.getString("list"));
                        List<User> listData = JSON.parseArray(jsonObject.getString("list"),User.class);
                        detailViewModel.userViewModel.addAll(listData);
                        addusers(listData);
                        showToast(res);
                        Log.i(TAG, "請求成功:" + res);
                        Log.i(TAG, "分頁大小:" + jsonObject.getString("pageSize"));
                    } catch (IOException e) {
                        Log.i(TAG, "系統錯誤!");
                        e.printStackTrace();
                    }
                }else{
                    Log.i(TAG, "請求失敗!");
                }
            }
        });
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章