我正在用Android寻呼库创建一个应用程序。我用的是改装。重写代码在ItemDataSource中,在那里我不能将变量传递给它。我有一些变化无常的意图。如何在Retrofit方法中设置变量。
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) {
}
});
}
}
主要活动
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);
}
}
项目视图模型
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();
}
}
顺便说一句,我在跟踪这个https://www.simplifiedcoding.net/android-paging-library-tutorial/
发布于 2019-02-13 01:59:06
为此,您必须在ItemDataSource类中创建一个构造函数,这是在ItemDataSourceFactory中创建该类的一个新对象,因此您必须在那里创建一个构造函数,以获取值并将其传递给ItemDataSource。您必须从您的ItemDataSourceFactory中将该值传递给viewModel。这就是它的外观(基于您发布的链接)。
public class ItemViewModel extends ViewModel {
LiveData<PagedList<Item>> itemPagedList;
LiveData<PageKeyedDataSource<Integer, Item>> liveDataSource;
public ItemViewModel(String table) {
ItemDataSourceFactory itemDataSourceFactory = new ItemDataSourceFactory(table);
liveDataSource = itemDataSourceFactory.getItemLiveDataSource();
PagedList.Config pagedListConfig =
(new PagedList.Config.Builder())
.setEnablePlaceholders(false)
.setPageSize(ItemDataSource.PAGE_SIZE).build();
itemPagedList = (new 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);
https://stackoverflow.com/questions/52694980
复制相似问题