这是我现在面临的一个奇怪的问题。从我的应用程序中,我从JSON文件中从链接中获取数据,然后用Volley解析它。现在我想在一个看起来不起作用的RecyclerView上显示数据,我很高兴我的代码很好,但是有些东西似乎不起作用,我找不到它。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.HomeActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_main_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</androidx.recyclerview.widget.RecyclerView>
</androidx.constraintlayout.widget.ConstraintLayout>
这是活动代码
HomeActivity.java:
public class HomeActivity extends AppCompatActivity {
private String url = "url/to/json.file";
private RecyclerView mList;
private LinearLayoutManager linearLayoutManager;
private List<News> newsList;
private RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
newsList = new ArrayList<>();
mList = findViewById(R.id.rv_main_list);
adapter = new NewsAdapter(newsList);
mList.setHasFixedSize(true);
mList.setLayoutManager(new LinearLayoutManager(this));
mList.setAdapter(adapter);
getData();
}
这是我从适配器中扩展的布局,并从JSON文件中设置数据
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#673AB7"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
和适配器类相关的代码,我猜:
@Override public NewsAdapter.ViewWholder OnCreateViewWholder(@nonnull ViewGroup parent,int viewType){LayoutInflater LayoutInflater=LayoutInflater.From(parent.GetContext());View View=LayoutInflater.Inflate(r.Layout.Layout_Single_Item,parent,false);ViewWholder ViewWholder=new ViewWholder(View);return
@Override
public void onBindViewHolder(@NonNull NewsAdapter.ViewHolder holder, int position) {
final News currentNews = newsList.get(position);
holder.tvTitle.setText(String.valueOf(currentNews.getTitle()));
Glide.with(MContext.GetApplicationContext()).Load(CurrentNews.GetImage()).Into(Holder.IVARTICLEImage);}
holder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri newsUri = Uri.parse(currentNews.getNewsLink());
Intent toWebSiteIntent = new Intent(Intent.ACTION_VIEW, newsUri);
mContext.startActivity(toWebSiteIntent);
}
});
ViewHolder类:
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView tvTitle;
public ImageView ivArticleImage;
public LinearLayout linearLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
this.tvTitle = itemView.findViewById(R.id.tv_title);
this.ivArticleImage = itemView.findViewById(R.id.iv_image);
linearLayout = itemView.findViewById(R.id.linearlayout);
}
}
不知道我做错了什么。谢谢你抽出时间。
getData函数:
private void getData() {
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading...");
progressDialog.show();
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
ArrayList<News> newsList = new ArrayList<>();
for(int i = 0; i < response.length(); i++){
try{
JSONObject jsonObject = response.getJSONObject(i);
News article = new News();
article.setTitle(jsonObject.getString("title"));
article.setImage(jsonObject.getString("image"));
}catch (JSONException e){
e.printStackTrace();
progressDialog.dismiss();
}
}
adapter.notifyDataSetChanged();
progressDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley", error.toString());
progressDialog.dismiss();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonArrayRequest);
}
更新2:
进程:com.agencegg.apps.actualitecd,pid:15002 java.lang.nullpointerException:尝试在com.agencegg.apps.actualitecd.adapters.newsadapter.onbindviewwholder(newsadapter.java:73)的null对象引用上调用虚拟方法“android.content.context android.content.context.getapplicationcontext()”//...
在适配器上添加一个方法,如下所示:
public void update(ArrayList<News> newsList){
this.newsList = newsList;
}
按照如下方式更新onResponse()方法上的列表:
@Override
public void onResponse(JSONArray response) {
ArrayList<News> newsList = new ArrayList<>();
for(int i = 0; i < response.length(); i++){
try{
JSONObject jsonObject = response.getJSONObject(i);
News article = new News();
article.setTitle(jsonObject.getString("title"));
article.setImage(jsonObject.getString("image"));
newsList.add(news).
}catch (JSONException e){
e.printStackTrace();
progressDialog.dismiss();
}
}
adapter.update(newsList)
adapter.notifyDataSetChanged();
progressDialog.dismiss();
}
}
如何使用网格布局管理器水平显示三行三列的循环视图项目,增加垂直增加的价值,类似于下图
我在ScrollView中有一个这样的RecyclerView: 的项目是一个,其中有一个和其他视图。该和的都是。用户可以在没有任何长度/行限制的情况下输入到该中,以便每个项目的高度都不同。 然后我发现中的返回真值,但调用的时间错误(少于应有的时间),因此不足以显示所有项目。 我发现只有当我编写了时才会发生这种情况。但是我不能删除这一行。因为如果我这样做了,将无法流畅滚动,并且与和本身内的其他视图
我是一个初学静态编程语言的学生,正在学习一个示例回收人员视图。我开始编码,但没有得到我应该得到的结果,即使在检查和重新检查代码之后也是如此。然后我注意到,即使使用非常基本的代码,它仍然没有按照应有的方式运行。我将包含基本代码,当使用时,它应该显示一个通用列表。我只得到列表中的一项。我怀疑代码以外的其他东西正在影响结果;但是我还没有达到知道的水平。 请看活动内容。xml: 注意它有行。 下面是列表(
最后是我的适配器类
我试图在一个对话框中的recyclerView中显示数据,数据是从HTTP请求获取的。 我验证了适配器是否获得了数据——我在适配器中打印了数组长度,结果很好,但由于某些原因它不会显示数据——我所能看到的只是一个空白区域,recyclerView应该在那里。 重要提示:该应用程序运行良好,运行时没有错误或其他问题,回收器视图不存在。 xmi文件:
我在StackOverflow上看到了一些类似的事件。然而,这些似乎都不适用于我的情况。我遇到的问题是,我的RecyclerView正在工作,但没有显示任何内容。我已经运行了多个测试,试图找出它不工作的原因,但所有测试都支持它正常工作的事实。 getItemCount中的日志返回3,这是正确的数字。我只是不明白为什么它没有显示。我回头看了我在以前的活动中做的回收器视图,它们都在一定程度上匹配(其他