java - E/RecyclerView:没有附加适配器;在 recyclerview 跳过布局和视图 0 并且不显示 recyclerview
问题描述
我发现了一些错误,而在 recyclerview 显示数据时它没有显示数据。仅显示 0。在显示布局回收器但数据为空之后
这里 StatistikActivty 显示 recyclerview
public class StatistikActivity extends AppCompatActivity {
ImageView back;
EditText etedit;
private ProgressBar progressBar;
private RecyclerView rcdata;
private static final String STATS_URL = "https://api.covid19api.com/summary";
ArrayList<ModelData> dataArrayList;
AdapterData adapterData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_statistik);
back = findViewById(R.id.imageView16);
progressBar = findViewById(R.id.progresbar);
etedit = findViewById(R.id.etedit);
rcdata = findViewById(R.id.recystat);
rcdata.setLayoutManager(new LinearLayoutManager(this));
dataArrayList = new ArrayList<>();
adapterData = new AdapterData(this, dataArrayList);
rcdata.setAdapter(adapterData);
rcdata.setHasFixedSize(true);
progressBar.setVisibility(View.GONE);
prosesdata();
etedit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
try{
adapterData.getFilter().filter(charSequence);
}
catch (Exception e){
e.printStackTrace();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
}
@Override
public void onResume() {
super.onResume();
prosesdata();
}
private void prosesdata(){
progressBar.setVisibility(View.VISIBLE);
StringRequest stringRequest = new StringRequest(Request.Method.GET, STATS_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
handlerespon(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);
Toast.makeText(StatistikActivity.this, ""+error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void handlerespon(String response) {
dataArrayList = new ArrayList<>();
dataArrayList.clear();
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("Countries");
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("dd/MM/yyyy hh:mm a");
Gson gson = gsonBuilder.create();
for (int i=0; i<jsonArray.length(); i++){
ModelData modelData = gson.fromJson(jsonArray.getJSONObject(i).toString(), ModelData.class);
dataArrayList.add(modelData);
}
// adapterData = new AdapterData(this, dataArrayList);
//rcdata.setAdapter(adapterData);
rcdata.setHasFixedSize(true);
adapterData.notifyDataSetChanged();
progressBar.setVisibility(View.GONE);
}
catch (Exception e){
progressBar.setVisibility(View.GONE);
Toast.makeText(this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
public class Urutan implements Comparator<ModelData> {
@Override
public int compare(ModelData modelData, ModelData t1) {
return modelData.getCountry().compareTo(t1.getCountry());
}
}
}
这里适配器数据
public class AdapterData extends RecyclerView.Adapter<AdapterData.RecyclerHolder> implements Filterable {
private Context context;
public ArrayList<ModelData> dataArrayList, searchdat;
private Searchdata searchdata;
public AdapterData(Context context, ArrayList<ModelData> dataArrayList) {
this.context = context;
this.dataArrayList = dataArrayList;
this.searchdat = dataArrayList;
}
@NonNull
@Override
public RecyclerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.list_stat, parent, false);
return new RecyclerHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerHolder holder, int position) {
ModelData modelData = dataArrayList.get(position);
String Country = modelData.getCountry();
String TotalConfirmed = modelData.getTotalConfirmed();
String NewConfirmed = modelData.getNewConfirmed();
String TotalDeaths = modelData.getTotalDeaths();
String NewDeaths = modelData.getNewDeaths();
String TotalRecovered = modelData.getTotalRecovered();
String NewRecovered= modelData.getNewRecovered();
holder.negara.setText(Country);
holder.totalpositif.setText(TotalConfirmed);
holder.positifbaru.setText(NewConfirmed);
holder.totalmati.setText(TotalDeaths);
holder.matihariini.setText(NewDeaths);
holder.totalsembuh.setText(TotalRecovered);
holder.sembuhhariini.setText(NewRecovered);
}
@Override
public int getItemCount() {
return dataArrayList.size();
}
@Override
public Filter getFilter() {
if(searchdata == null) {
searchdata = new Searchdata(this, searchdat);
}
return searchdata;
}
class RecyclerHolder extends RecyclerView.ViewHolder{
TextView negara, totalpositif, positifbaru, totalmati, matihariini, totalsembuh, sembuhhariini;
public RecyclerHolder(@NonNull View itemView) {
super(itemView);
negara = itemView.findViewById(R.id.negara);
totalpositif = itemView.findViewById(R.id.negara);
positifbaru = itemView.findViewById(R.id.negara);
totalmati = itemView.findViewById(R.id.negara);
matihariini = itemView.findViewById(R.id.negara);
totalsembuh = itemView.findViewById(R.id.negara);
sembuhhariini = itemView.findViewById(R.id.negara);
}
}
}
这里搜索数据
public class Searchdata extends Filter {
private AdapterData adapterData;
private ArrayList<ModelData> searchdat;
public Searchdata(AdapterData adapterData, ArrayList<ModelData> searchdat) {
this.adapterData = adapterData;
this.searchdat = searchdat;
}
@Override
protected FilterResults performFiltering(CharSequence c) {
FilterResults results = new FilterResults();
if(c != null && c.length() >0){
c = c.toString().toUpperCase();
ArrayList<ModelData> modelDataArrayList = new ArrayList<>();
for(int i=0; i<searchdat.size(); i++){
if(searchdat.get(i).getCountry().toUpperCase().contains(c)){
modelDataArrayList.add(searchdat.get(i));
}
}
results.count = modelDataArrayList.size();
results.values = modelDataArrayList;
} else {
results.count = searchdat.size();
results.values = searchdat;
}
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults results) {
adapterData.dataArrayList = (ArrayList<ModelData>) results.values;
adapterData.notifyDataSetChanged();
}
}
请帮助我,谢谢
解决方案
尝试在您的回收器视图适配器中进行过滤,而不是使用自定义过滤器。像这样编辑您的活动代码:
public class StatistikActivity extends AppCompatActivity {
ImageView back;
EditText etedit;
private ProgressBar progressBar;
private RecyclerView rcdata;
private static final String STATS_URL = "https://api.covid19api.com/summary";
ArrayList<ModelData> dataArrayList = new ArrayList<>();
private String search = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_statistik);
back = findViewById(R.id.imageView16);
progressBar = findViewById(R.id.progresbar);
etedit = findViewById(R.id.etedit);
rcdata = findViewById(R.id.recystat);
rcdata.setLayoutManager(new LinearLayoutManager(this));
rcdata.setAdapter(new AdapterData(this, dataArrayList, search));
rcdata.setHasFixedSize(true);
progressBar.setVisibility(View.GONE);
prosesdata();
etedit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
search = charSequence.toString();
rcdata.setAdapter(new AdapterData(this, dataArrayList, search));
}
@Override
public void afterTextChanged(Editable editable) {
}
});
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
}
...
private void handlerespon(String response) {
dataArrayList = new ArrayList<>();
dataArrayList.clear();
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("Countries");
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("dd/MM/yyyy hh:mm a");
Gson gson = gsonBuilder.create();
for (int i=0; i<jsonArray.length(); i++){
ModelData modelData = gson.fromJson(jsonArray.getJSONObject(i).toString(), ModelData.class);
dataArrayList.add(modelData);
}
rcdata.setAdapter(new AdapterData(this, dataArrayList, search));
progressBar.setVisibility(View.GONE);
}
catch (Exception e){
progressBar.setVisibility(View.GONE);
Toast.makeText(this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
public class Urutan implements Comparator<ModelData> {
@Override
public int compare(ModelData modelData, ModelData t1) {
return modelData.getCountry().compareTo(t1.getCountry());
}
}
}
你的回收器视图适配器是这样的
public class AdapterData extends RecyclerView.Adapter<AdapterData.RecyclerHolder> implements Filterable {
private Context context;
public ArrayList<ModelData> dataArrayList;
private Searchdata searchdata;
private String search;
public AdapterData(Context context, ArrayList<ModelData> dataArrayList, String search) {
this.context = context;
this.search = search;
if (!search.equals("")) {
for(int i=0; i<searchdat.size(); i++){
if(dataArrayList.get(i).getCountry().toUpperCase().contains(c)) {
this.dataArrayList.add(dataArrayList.get(i));
}
}
} else {
this.dataArrayList = dataArrayList;
}
}
// Remove the getFilter method
...
}
推荐阅读
- javascript - 当在 vue.js 中的特定卡片上发生点击功能时,如何应用基于书籍 ID 或卡片 ID 的样式?
- pandas - 指定列中值的密度图
- python - 通过提交测试示例来解密应用程序背后的逻辑
- python - 在 python 中导入 numpy 库时出现错误
- heroku - 如何在 Heroku 上部署使用 webrtc、peerjs 和 socketio 制作的视频聊天应用
- javascript - 如何使用 JQuery 仅显示 5 个加载更多功能的图像?
- c# - 无限运行进程/任务直到单击按钮,然后在按下按钮时再次启动无限进程
- javascript - 搜索时如何使用数据库中的 PHP 在 Google 地图中显示多个标记?
- javascript - 在firebase中查询具有相关字段和相同值的两个集合
- javascript - 计算 431 代币的百分比变化并找到更大的变化