![](/img/trans.png)
[英]E/RecyclerView: No adapter attached; skipping layout not showing the data in recyclerview
[英]E/RecyclerView: No adapter attached; skipping layout and view 0 at recyclerview and not showing recyclerview
我發現了一些錯誤,而在 recyclerview 顯示數據時它沒有顯示數據。 僅顯示 0。在顯示布局回收器之后,但數據 null
這里 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
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.