Android 将变量传递给分页库类

Android 将变量传递给分页库类,android,retrofit,android-paging,Android,Retrofit,Android Paging,我正在用Android分页库创建一个应用程序。我正在对它进行改装。 改装代码在ItemDataSource中,我无法将变量传递给它。我有一些变数是故意的。如何在改装Post方法中设置变量 ItemDataSource public class ItemDataSource extends PageKeyedDataSource<Integer, Item> { //we will start from the first page which is 1 private static

我正在用Android分页库创建一个应用程序。我正在对它进行改装。 改装代码在ItemDataSource中,我无法将变量传递给它。我有一些变数是故意的。如何在改装Post方法中设置变量

ItemDataSource

public class ItemDataSource extends PageKeyedDataSource<Integer, Item> {
//we will start from the first page which is 1
private static final int PAGE_NUMBER = 1;
//this will be called once to load the initial data
String table
ItemDataSource(String table){
this.table = table;
}
@Override
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull 
final LoadInitialCallback<Integer, Item> callback) {

   RetrofitClient.getInstance()
      // I want to pass table variable here.
            .getApi().getAnswers("table","","","",PAGE_NUMBER,"")
            .enqueue(new Callback<StackApiResponse>() {
                @Override
                public void onResponse(Call<StackApiResponse> call, 
                    Response<StackApiResponse> response) {
                    if (response.body() != null) {
                        callback.onResult(response.body().images, null, 
                 PAGE_NUMBER + 1);
                    }
                }

                @Override
                public void onFailure(Call<StackApiResponse> call, 
  Throwable 
                   t) {

                }
            });
               }
            }
公共类ItemDataSource扩展了PageKeyedDataSource{
//我们将从第一页开始,即1
专用静态最终整版页码=1;
//这将被调用一次以加载初始数据
字符串表
ItemDataSource(字符串表){
this.table=表格;
}
@凌驾
public void loadInitial(@NonNull LoadInitialParams params,@NonNull
最终LoadInitialCallback(回调){
更新client.getInstance()
//我想在这里传递表变量。
.getApi().getAnswers(“表”、“页号”、“页码”)
.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用,
回应(回应){
if(response.body()!=null){
callback.onResult(response.body().images,null,
页码+1);
}
}
@凌驾
公共失效失效失效(调用,
丢弃的
(t){
}
});
}
}
主要活动

    public class Detail extends AppCompatActivity {
    ArrayList<Item> items;
    Api api;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
      // I'm getting intent here.
        final     RecyclerView recyclerView = 
        findViewById(R.id.recyclerview);
         recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setHasFixedSize(true);
        ItemViewModel itemViewModel = 
       ViewModelProviders.of(this).get(ItemViewModel.class);

        //creating the Adapter

        //observing the itemPagedList from view model
        itemViewModel.itemPagedList.observe(this, new 
       Observer<PagedList<Item>>() {
            @Override
            public void onChanged(@Nullable PagedList<Item> items) {

                //in case of any changes
                //submitting the items to adapter
                adapter.submitList(items);
            }
        });

        //setting the adapter
        recyclerView.setAdapter(adapter);

    }
 }
公共类详细信息扩展了AppCompative活动{
数组列表项;
Api;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_详细信息);
//我在这里开始有兴趣了。
最终回收视图回收视图=
findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
recyclerView.setHasFixedSize(true);
ItemViewModel ItemViewModel=
ViewModelProviders.of(this.get)(ItemViewModel.class);
//创建适配器
//从视图模型观察itemPagedList
itemViewModel.itemPagedList.observe(这个,新的
观察员(){
@凌驾
更改后的公共void(@Nullable PagedList项){
//如果有任何变化
//将项目提交到适配器
适配器。提交列表(项目);
}
});
//设置适配器
recyclerView.setAdapter(适配器);
}
}
项目视图模型

public class ItemViewModel extends ViewModel {

//creating livedata for PagedList  and PagedKeyedDataSource
LiveData<PagedList<Item>> itemPagedList;
LiveData<PageKeyedDataSource<Integer, Item>> liveDataSource;

//constructor
public ItemViewModel() {
    //getting our data source factory
    ItemDataSourceFactory itemDataSourceFactory = new 
 ItemDataSourceFactory();

    //getting the live data source from data source factory
    liveDataSource = itemDataSourceFactory.getItemLiveDataSource();

    //Getting PagedList config
    PagedList.Config pagedListConfig =
            (new PagedList.Config.Builder())
                    .setEnablePlaceholders(false)
                    .setPageSize(10).build();

    //Building the paged list
    itemPagedList = (new LivePagedListBuilder(itemDataSourceFactory, 
 pagedListConfig))
            .build();
 }
公共类ItemViewModel扩展了ViewModel{
//为PagedList和PagedKeydDataSource创建livedata
LiveData项目页面列表;
LiveData-liveDataSource;
//建造师
公共项目视图模型(){
//获取我们的数据源工厂
ItemDataSourceFactory ItemDataSourceFactory=新建
ItemDataSourceFactory();
//从数据源工厂获取实时数据源
liveDataSource=itemDataSourceFactory.getItemLiveDataSource();
//获取页面列表配置
PagedList.Config pagedListConfig=
(新建PagedList.Config.Builder())
.setEnablePlaceholders(false)
.setPageSize(10.build();
//构建分页列表
itemPagedList=(新的LivePagedListBuilder(itemDataSourceFactory,
pagedListConfig)
.build();
}
}


顺便说一句,我遵循这个

要做到这一点,您必须在ItemDataSource类中创建一个构造函数,正如您所做的那样,该类的一个新对象在ItemDataSourceFactory中创建,因此您必须在那里创建一个构造函数来获取值并将其传递给ItemDataSource。并且必须从viewModel将值传递给ItemDataSourceFactory。这就是它的外观(基于您发布的链接)

公共类ItemViewModel扩展了ViewModel{
LiveData项目页面列表;
LiveData-liveDataSource;
公共项目视图模型(字符串表){
ItemDataSourceFactory ItemDataSourceFactory=新的ItemDataSourceFactory(表);
liveDataSource=itemDataSourceFactory.getItemLiveDataSource();
PagedList.Config pagedListConfig=
(新建PagedList.Config.Builder())
.setEnablePlaceholders(false)
.setPageSize(ItemDataSource.PAGE_SIZE).build();
itemPagedList=(新的LivePagedListBuilder(itemDataSourceFactory,pagedListConfig))
.build();
}}
然后,在活动/片段中,您应该像这样传递值:

ItemViewModel itemViewModel = ViewModelProviders.of(this, new ViewModelProvider.Factory() {
        @NonNull
        @Override
        public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
            return (T)new ItemViewModel ("your table name");
        }
    }).get(ItemViewModel.class);
ItemViewModel ItemViewModel=ViewModelProviders.of(这是新的ViewModelProvider.Factory()){
@非空
@凌驾
公共T创建(@NonNull类modelClass){
返回(T)新的ItemViewModel(“您的表名”);
}
}).get(ItemViewModel.class);

如何在改装数据源类中调用它???…plss
ItemViewModel itemViewModel = ViewModelProviders.of(this, new ViewModelProvider.Factory() {
        @NonNull
        @Override
        public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
            return (T)new ItemViewModel ("your table name");
        }
    }).get(ItemViewModel.class);