簡體   English   中英

E/RecyclerView:沒有附加適配器; 在 recyclerview 跳過布局和視圖 0 並且不顯示 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM