我正在我的应用程序中实现android分页库,并希望将项目的“ id”从我的活动传递到进行网络调用的数据源

AddCommentActivity.java

//I want to pass this string to the network call.
String image_id = getIntent().getStringExtra("image_id");

CommentViewModel commentViewModel = new ViewModelProvider(this).get(CommentViewModel.class);


CommentDataSource.java

public class CommentDataSource extends PageKeyedDataSource<Long, Comment> {
    public CommentDataSource(){
    progress_bar = new MutableLiveData<>();
     }

   @Override
public void loadInitial(@NonNull final LoadInitialParams<Long> params, @NonNull final LoadInitialCallback<Long, Comment> callback) {
    RestApi restApi = RetrofitApi.create();

    Call<CommentResponse> call = restApi.getComments(FIRST_PAGE, "I want the image_id from activity here");

    call.enqueue(new Callback<CommentResponse>() {
        @Override
        public void onResponse(Call<CommentResponse> call, Response<CommentResponse> response) {

 }


CommentDataSourceFactory.java

public class CommentDataFactory extends DataSource.Factory<Long, Comment> {

public MutableLiveData<CommentDataSource> commentLiveDataSource = new MutableLiveData<>();

public CommentDataFactory() {
}

@Override
public DataSource<Long, Comment> create() {
    CommentDataSource commentDataSource = new CommentDataSource();
    commentLiveDataSource.postValue(commentDataSource);
    return commentDataSource;
}


CommentViewModel.java

public class CommentViewModel extends ViewModel {

public  LiveData<PagedList<Comment>> commentPagedList;
public  LiveData<CommentDataSource> liveDataSource;
public  LiveData progressBar;

public CommentViewModel(){
    CommentDataFactory commentDataFactory = new CommentDataFactory();
    liveDataSource = commentDataFactory.commentLiveDataSource;

    progressBar = Transformations.switchMap(liveDataSource, CommentDataSource::getProgressBar);

    PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setPageSize(CommentDataSource.PAGE_SIZE)
            .build();

    commentPagedList = new LivePagedListBuilder<>(commentDataFactory, config).build();
}


public LiveData<PagedList<Comment>> getCommentData(){
    return commentPagedList;
}

public void getRefreshedData(){
    getCommentData().getValue().getDataSource().invalidate();
}
}


怎么做。?我检查了Passing variable to paging library class这正是我想要做的,但我不理解它,并且代码给出了错误。错误如

无法创建类CommentViewModel的实例

CommentViewModel没有零参数构造函数

最佳答案

好吧:

 commentViewmodel1.getCommentData().observe(this, new Observer<PagedList<Comments>>(){
 @Override
public void onChanged(PagedList<Comment>
    comments){
      adapter.submitList(comments);

    }
});

10-08 17:34