package com.example.newsapp4;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.example.newsapp4.Model.Articles;
import com.squareup.picasso.Picasso;
import java.util.List;
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
Context context;
List<Articles> articles;
public Adapter(Context context, List<Articles> articles) {
this.context = context;
this.articles = articles;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.items, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final Articles a = articles.get(position);
String imageUrl = a.getUrlToImage();
holder.tvTitle.setText(a.getTitle());
holder.tvSource.setText(a.getSource().getName());
holder.tvDate.setText(a.getPublishedAt());
Picasso.with(context).load(imageUrl).into(holder.imageView);
}
@Override
public int getItemCount() {
return articles.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView tvTitle,tvSource,tvDate;
ImageView imageView;
CardView cardView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tvTitle = itemView.findViewById(R.id.tvTitle);
tvSource = itemView.findViewById(R.id.tvSource);
tvDate = itemView.findViewById(R.id.tvDate);
imageView = itemView.findViewById(R.id.image);
cardView = itemView.findViewById(R.id.cardView);
}
}
}
下面是我的java类,在这里我用RecyclerView调用适配器:
package com.example.newsapp4;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.example.newsapp4.Model.Articles;
import com.example.newsapp4.Model.Headlines;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class sportsnews extends AppCompatActivity {
Adapter adapter;
Intent intencion;
RecyclerView recyclerView;
final String API_KEY = "my api key";
List<Articles> articles = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sportsnews);
recyclerView = findViewById(R.id.recyclerView1);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
String country = getCountry();
retrieveJson(country, API_KEY);
}
public void retrieveJson(String country, String apiKey){
Call<Headlines> call = ApiClient.getInstance().getApi().getHeadlines(country, apiKey);
call.enqueue(new Callback<Headlines>() {
@Override
public void onResponse(Call<Headlines> call, Response<Headlines> response) {
if(response.isSuccessful() && response.body().getArticles() != null){
articles.clear();
articles = response.body().getArticles();
adapter = new Adapter(sportsnews.this,articles);
recyclerView.setAdapter(adapter);
}
}
@Override
public void onFailure(Call<Headlines> call, Throwable t) {
Toast.makeText(sportsnews.this, t.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
});
}
public String getCountry(){
Locale locale = Locale.getDefault();
String country = locale.getCountry();
return country.toLowerCase();
}
public void aPerfil(View vista){
intencion = new Intent(this, profile_activity.class);
startActivity(intencion);
}
}
请注意,有一个方法与一个未应用的按钮一起使用。方法是aperfil
。
这是我的清单
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.newsapp4">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".sportsnews" android:screenOrientation="locked"/>
<activity android:name=".profile_activity" android:screenOrientation="locked"/>
<activity android:name=".menuContent" android:screenOrientation="locked"/>
<activity android:name=".MainActivity" android:screenOrientation="locked">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
</application>
</manifest>
如果需要,请随意询问更多代码。
谢谢你抽出时间!
将代码下方从onrespons
移动到oncreate
之前的retrievejson(country,API_KEY);
adapter = new Adapter(sportsnews.this,articles);
recyclerView.setAdapter(adapter);
在适配器
中创建一个setter,如下所示
public void setArticles(List<Articles> newArticle) {
if (newArticle != null && newArticle.size() > 0) {
this.articles = newArticle;
notifyDataSetChanged();
}
}
然后在您的onresponse
中编写类似下面的内容,前面您在recylerview中设置适配器的地方。
adapter.setArticles(articles)
我需要帮助,我有一个错误,那就是这个:E/recyclerView:没有连接适配器;跳过布局 代码: 公共视图onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){View View=inflater.inflate(r.layout.fragment_chats,container,
我收到以下错误:“RecyclerView:未附加适配器;跳过布局”但我已附加适配器...我试过很多不同的方法,但都解决不了这个错误。 我正在使用Volley库获取数据。当我启动activity时,直到结束只有进度条可见,并且收到上面的Logcat消息。我已经在中添加了带有适配器的。你能帮帮我吗? 下面是我的代码: 主要活动 地震适配器 mainactivity.xml EquestakerAw.
我已经提到了相当少的帖子关于这个错误,但没有一个能够解决我的问题。我有一个片断,在这里我使用修改获得了我的值,我已经在下面显示了: 下面是我的RecyclerView适配器类:
我一直在stackoverflow和这篇博文上阅读不同的答案,并试图实现它们的解决方案,但我仍然得到错误: 片段中的布局: 和项目的布局: 我做错了什么? 编辑:以下是适配器:
当应用程序启动时,我得到一个空白屏幕,当我检查日志时,我得到:E/回收人员视图:没有连接适配器;跳过布局错误 我不知道为什么?任何想法,它似乎没有附加回收器视图或添加任何数据,我附加了Main活动、DataAdapter和数据类。 主要活动 数据适配器 下面是我的数据类,将从中提取数据 我ncluded.java 收集器和设置器 这是jsonResponse类,在接口中引用 感谢任何帮助。
我正在使用一个片段来查看一个RecyclerView。但我总是犯这个错误 E/RecyclerView:未附加适配器;跳过布局 我已经为我的recyclerview创建了一个适配器,但布局没有显示。php后端运行良好。谁能帮帮我。下面是我的片段和适配器代码 Tips.java TipAdapter.java