首次打开我的应用时,显示1-5或7的是连续的。然后,我滚动我的Recyclerview,它随机显示该项目。 这是主要的json链接:http://services.hanselandpetal.com/feeds/flowers.json
查看图片以获取更多详细信息
首次打开
当我滚动
MainActivity.class
public class MainActivity extends AppCompatActivity {
String BASE_URL= "http://services.hanselandpetal.com/";
List<Example> examples=new ArrayList<>();
AdapterClass adapterClass;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.recylerView_ID);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getApplicationContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiCall apiCall=retrofit.create(ApiCall.class);
final Call<List<Example>> exampleCall=apiCall.getData();
exampleCall.enqueue(new Callback<List<Example>>() {
@Override
public void onResponse(Call<List<Example>> call, Response<List<Example>> response) {
if (response.code()==200){
examples=response.body();
adapterClass=new AdapterClass(MainActivity.this,examples);
recyclerView.setAdapter(adapterClass);}
}
@Override
public void onFailure(Call<List<Example>> call, Throwable t) {
}
});
}
}
AdapterClass.class
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.viewModel> {
TextView name;
TextView catagory;
TextView count;
ImageView imageView;
List<Example>examples;
Context context;
public AdapterClass(Context context, List<Example> examples) {
this.context=context;
this.examples = examples;
Toast.makeText(context, ""+examples.size(), Toast.LENGTH_SHORT).show();
}
@NonNull
@Override
public viewModel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater layoutInflater=LayoutInflater.from(context);
View view=layoutInflater.inflate(R.layout.item_view,null);
return new viewModel(view);
}
@Override
public void onBindViewHolder(@NonNull viewModel viewModel, int i) {
name.setText(examples.get(i).getName());
catagory.setText(examples.get(i).getCategory());
count.setText(String.valueOf(examples.get(i).getProductId()));
String image_url = "http://services.hanselandpetal.com/photos/"+examples.get(i).getPhoto();
Picasso.get().load(image_url).resize(50,50).centerCrop().into(imageView);
}
@Override
public int getItemCount() {
return examples.size();
}
public class viewModel extends RecyclerView.ViewHolder {
public viewModel(@NonNull View itemView) {
super(itemView);
name=itemView.findViewById(R.id.name_TV);
catagory=itemView.findViewById(R.id.catagory_TV);
count=itemView.findViewById(R.id.serial_number_TV);
imageView=itemView.findViewById(R.id.imageView_ID);
}
}
}
我该如何解决这个问题?谢谢。
答案 0 :(得分:0)
使用此
@NonNull
@Override
public viewModel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater layoutInflater=LayoutInflater.from(context);
View view=layoutInflater.inflate(R.layout.item_view,viewGroup,false);
return new viewModel(view);
}
代替此
@NonNull
@Override
public viewModel onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater layoutInflater=LayoutInflater.from(context);
View view=layoutInflater.inflate(R.layout.item_view,null);
return new viewModel(view);
}
有关更多信息,请阅读文档
public View inflate (XmlPullParser parser,
ViewGroup root,
boolean attachToRoot)
参数
parser
XmlPullParser
:包含视图层次结构描述的XML dom节点。 root
ViewGroup
:作为生成层次结构的父级的可选视图(如果attachToRoot为true),或者只是一个为返回的层次结构的根提供一组LayoutParams值的对象(如果attachToRoot,则为可选视图)是错误的。)
此值可能为空。
attachToRoot
boolean
:是否应将扩展的层次结构附加到根参数?如果为false,则root仅用于为XML中的根视图创建LayoutParams的正确子类。还要更改您的 onBindViewHolder
@Override
public void onBindViewHolder(@NonNull viewModel viewModel, int i) {
viewModel.name.setText(examples.get(i).getName());
viewModel.catagory.setText(examples.get(i).getCategory());
viewModel.count.setText(String.valueOf(examples.get(i).getProductId()));
String image_url = "http://services.hanselandpetal.com/photos/"+examples.get(i).getPhoto();
Picasso.get().load(image_url).resize(50,50).centerCrop().into(viewModel.imageView);
}
答案 1 :(得分:0)
要使用视图持有人模式,您应该在viewholder类内定义控件,并通过传递给onBindViewHoler()
的对象访问它
您的视图持有者类应该是
public class viewModel extends RecyclerView.ViewHolder {
TextView name;
TextView catagory;
TextView count;
ImageView imageView;
public viewModel(@NonNull View itemView) {
super(itemView);
name=itemView.findViewById(R.id.name_TV);
catagory=itemView.findViewById(R.id.catagory_TV);
count=itemView.findViewById(R.id.serial_number_TV);
imageView=itemView.findViewById(R.id.imageView_ID);
}
}
现在在onBindViewHolder()
中使用
@Override
public void onBindViewHolder(@NonNull viewModel vh, int i) {
vh.name.setText(examples.get(vh.getAdapterPosition()).getName());
vh.catagory.setText(examples.get(vh.getAdapterPosition()).getCategory());
vh.count.setText(String.valueOf(examples.get(vh.getAdapterPosition()).getProductId()));
String image_url = "http://services.hanselandpetal.com/photos/"+examples.get(vh.getAdapterPosition()).getPhoto();
Picasso.get().load(image_url).resize(50,50).centerCrop().into(vh.imageView);
}
答案 2 :(得分:0)
在NestedScrollView中设置您的recyclerview,然后在recyclerview中添加属性 nestedScrollingEnabled = false;