首页 > 解决方案 > 为什么数据没有显示在 adpaters android 中

问题描述

在 RecordAdpater 类中,我使用日志来显示数据。在 RecordModel 类中,数据是从 Activity Main 类及其工作中设置的。但是在 RecordAdpater 类中,当我想获取该数据时,那里没有显示任何内容。一切都很好。我不知道为什么数据没有显示在那里。即使日志值不是空或 0。没有任何东西显示为什么。为什么和为什么?请帮助我,并提前感谢。

主 Activity 包 com.example.coronatasbeeh;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

import android.graphics.drawable.ColorDrawable;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;


import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    TextView textViewResult, textViewLapCounter;
    ImageButton btnReset, btnMinus;
    int count = 0;
    int lapCount = 0;
    RecyclerView recyclerView;
    List<Model> main_List;
    RecyclerView.Adapter adapter;
    Boolean sound,vibration,minusBtn;
     int countLimit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //For custom toolbar

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //For Bottom Nav.


        BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigationBar);
        bottomNavigationView.setSelectedItemId(R.id.home_bottomNav);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.home_bottomNav:
                        return true;
                    case R.id.record_bottomNav:
                        startActivity(new Intent(getApplicationContext(), RecordActivity.class));
                        overridePendingTransition(0, 0);
                        return true;
                    case R.id.setting_bottomNav:
                        startActivity(new Intent(getApplicationContext(), SettingActivity.class));
                        overridePendingTransition(0, 0);
                        return true;
                }
                return false;
            }
        });    
        textViewResult = findViewById(R.id.textViewCount);
        textViewLapCounter = findViewById(R.id.textViewLapCounter);
        btnReset = (ImageButton) findViewById(R.id.btnReset);
        btnMinus = (ImageButton) findViewById(R.id.btnMinus);

        final Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        main_List = new ArrayList<>();
        recyclerView = findViewById(R.id.recyclerView_dua);
        // for Recyler Dua container layout Style + add Data in it.
        main_List.add(new Model("DUA#01", "الْحَمْدُ لِلَّهِ الَّذِي عَافَانِي مِمَّا ابْتَلَاكَ بِهِ وَفَضَّلَنِي عَلَى كَثِيرٍ مِمَّنْ خَلَقَ تَفْضِيلً"));
        adapter = new DuaAdapter(main_List, getApplicationContext());
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        recyclerView.setAdapter(adapter);
        // for sound

        final MediaPlayer addSound = MediaPlayer.create(this, R.raw.add_sound);
        final MediaPlayer minusSound = MediaPlayer.create(this, R.raw.minus_sound);

        SharedPreferences loadSettingPref = getSharedPreferences("com.example.coronatasbeeh.mySetting", Context.MODE_PRIVATE);
        countLimit = loadSettingPref.getInt("lapLimit", 0);
     sound=  loadSettingPref.getBoolean("soundSetting", true);
     vibration =   loadSettingPref.getBoolean("vibrateSetting", true);
     minusBtn = loadSettingPref.getBoolean("minusSetting", true);

     if (minusBtn==false){
         btnMinus.setVisibility(View.INVISIBLE);
     }


        //load save data, when app start:
        SharedPreferences myCount = getSharedPreferences("myTotalCount", Context.MODE_PRIVATE);
        count = myCount.getInt("count", 0);
        lapCount = myCount.getInt("lap", 0);
        textViewResult.setText("" + count);
        textViewLapCounter.setText("" + lapCount);
        textViewResult.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count += 1;
                if (vibration==true){
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
                } else {
                    //deprecated in API 26
                    vibrator.vibrate(200);
                }}
                textViewResult.setText("" + count);
                if (sound==true) {
                    addSound.start();
                }
                if (count > 0) {
                    if (count == countLimit)

                    {

                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                            vibrator.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
                        } else {
                            //deprecated in API 26
                            vibrator.vibrate(500);
                        }
                        lapCount++;
                        textViewLapCounter.setText("" + lapCount);
                    }
                    if (count > countLimit) {

                        textViewResult.setText("1");
                        count = 1;
                    }
                }

                SharedPreferences myCount = getSharedPreferences("myTotalCount", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = myCount.edit();
                editor.putInt("count", count);
                editor.putInt("lap", lapCount);
                editor.commit();

            }
        });
/*        btnReset*/
        btnMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (count == 0) {
                    Toast.makeText(MainActivity.this, "Your counter is already 0", Toast.LENGTH_SHORT).show();
                } else {
                    if (sound==true){
                    minusSound.start();}
                    count -= 1;
                    textViewResult.setText("" + count);
                    Log.i("test", "onClick: "+count);
                }


                SharedPreferences myCount = getSharedPreferences("myTotalCount", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = myCount.edit();
                editor.putInt("count", count);
                editor.commit();
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id==R.id.shareApp){

            if (count!=0) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_SEND);
                String url = "https://www.google.com/";
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT, "My Counter number is " + textViewResult.getText().toString() + " and my lap is " + lapCount + "\n  " + url);
                startActivity(Intent.createChooser(intent, "My Counter Details"));
            }
            else {
                Toast.makeText(MainActivity.this,"You don't have enough data for sharing",Toast.LENGTH_SHORT).show();
            }
    }
        if (id==R.id.save) {
            if (textViewResult.getText().toString().equals("0")) {
                Toast.makeText(MainActivity.this, "You don't have enough data for saving", Toast.LENGTH_LONG).show();
            } else {
                final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
                View mView = getLayoutInflater().inflate(R.layout.save_dialog, null);
                final Button btn_Save = mView.findViewById(R.id.btnSaveofSaveDialog);
                final Button btn_Cancel = mView.findViewById(R.id.btnCancelSaveDialog);
                final EditText editTextCounterTitle = mView.findViewById(R.id.editTextCounterTitle);
                //  String ed_text = editTextLapLimit.getText().toString().trim();
                alert.setView(mView);
                final AlertDialog alertDialog = alert.create();
                alertDialog.setCanceledOnTouchOutside(true);

                alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
                btn_Cancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        alertDialog.dismiss();
                    }
                });
                btn_Save.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        try {
                            if (editTextCounterTitle.getText().toString().trim().isEmpty()) {
                                editTextCounterTitle.setError("please enter title for save");

                            }
                            else {

// 这里我从 RecordModel 类发送数据..

                                RecordModel recordModel =  new RecordModel();
                                int c,lap,totalC;
                                c =Integer.parseInt(textViewResult
                                        .getText().toString());
                                lap = Integer.parseInt(textViewLapCounter.
                                        getText().toString());
                                totalC = lap*countLimit+c;
                                recordModel.setRecordCount(c);
                                recordModel.setRecordLap(lap);
                                recordModel.setRecordLimit(countLimit);
                                recordModel.setRecordTotalCount(totalC);
                                Log.i("totalC", "onClick: "+totalC);
                                recordModel.setRecordTitle(editTextCounterTitle.getText().toString());
                                Log.i("setTitle", "onClick: "+editTextCounterTitle.getText().toString());
                                Log.i("getTotalRC", "onClick: "+recordModel.getRecordTotalCount());
                                alertDialog.dismiss();
                            }

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
                });

                alertDialog.show();
            }
        }

        return true;
    }


    public void showResetDialogBox(View view) {
        final MediaPlayer restSound = MediaPlayer.create(this, R.raw.reset_sound);
        final AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
        View mView = getLayoutInflater().inflate(R.layout.reset_alert_dialog, null);
        Button btn_Reset = (Button) mView.findViewById(R.id.btnResetAlertDialog);
        Button btn_Cancel = (Button) mView.findViewById(R.id.btnCancelAlertDialog);
        alert.setView(mView);
        final  AlertDialog alertDialog = alert.create();
        alertDialog.setCanceledOnTouchOutside(true);
        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        btn_Cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
            }
        });


            btn_Reset.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    if (count == 0) {
                        textViewResult.setText("0");
                        textViewLapCounter.setText("0");
                        lapCount = 0;
                    } else {
                        count = 0;
                        lapCount = 0;
                        restSound.start();
                        textViewResult.setText("" + count);
                        textViewLapCounter.setText("" + count);
                        Toast.makeText(MainActivity.this, "Reset successfully", Toast.LENGTH_SHORT).show();
                    }
                    alertDialog.dismiss();


                    SharedPreferences myCount = getSharedPreferences("myTotalCount", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = myCount.edit();
                    editor.putInt("count", count);
                    editor.putInt("lap", lapCount);
                    editor.commit();

                }

            });


        alertDialog.show();

    }


}

记录模型类。

package com.example.coronatasbeeh;

public class RecordModel {
    String recordTitle;
    int recordCount;
    int recordLap;
    int recordLimit;
    int recordTotalCount;

    public RecordModel() {
    }

    public RecordModel(String recordTitle, int recordCount, int recordLap, int recordLimit, int recordTotalCount) {
        this.recordTitle = recordTitle;
        this.recordCount = recordCount;
        this.recordLap = recordLap;
        this.recordLimit = recordLimit;
        this.recordTotalCount = recordTotalCount;
    }

    public String getRecordTitle() {
        return recordTitle;
    }

    public void setRecordTitle(String recordTitle) {
        this.recordTitle = recordTitle;
    }

    public int getRecordCount() {
        return recordCount;
    }

    public void setRecordCount(int recordCount) {
        this.recordCount = recordCount;
    }

    public int getRecordLap() {
        return recordLap;
    }

    public void setRecordLap(int recordLap) {
        this.recordLap = recordLap;
    }

    public int getRecordLimit() {
        return recordLimit;
    }

    public void setRecordLimit(int recordLimit) {
        this.recordLimit = recordLimit;
    }

    public int getRecordTotalCount() {
        return recordTotalCount;
    }

    public void setRecordTotalCount(int recordTotalCount) {
        this.recordTotalCount = recordTotalCount;
    }
}

记录适配器类。

package com.example.coronatasbeeh;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import static android.content.ContentValues.TAG;

public class RecordAdapter extends RecyclerView.Adapter<RecordAdapter.MyViewHolder> {
    List<RecordModel> recordModels;
    Context context;


    public RecordAdapter(Context context, List<RecordModel> recordModels) {
        this.context = context;
        this.recordModels = recordModels;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.record_items, parent, false);
        MyViewHolder myViewHolder = new MyViewHolder(v);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {


        RecordModel rm = recordModels.get(position);
        holder.recordTotalCount.setText(rm.getRecordTotalCount());
        Log.i("recordtotalA", "onBindViewHolder: " + rm.getRecordTotalCount());
        holder.recordCount.setText(rm.getRecordCount());
        Log.i("Rc", "onBindViewHolder: " + rm.getRecordCount());
    }


    @Override
    public int getItemCount() {
        return recordModels.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView recordCount, recordLap, recordLimit, recordTotalCount, recordTitle;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            recordCount = itemView.findViewById(R.id.recordCount);
            recordLap = itemView.findViewById(R.id.recordLap);
            recordLimit = itemView.findViewById(R.id.recordLimit);
            recordTotalCount = itemView.findViewById(R.id.recordTotalCount);
            recordTitle = itemView.findViewById(R.id.recordTitle);


        }
    }
}

记录活动类

package com.example.coronatasbeeh;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.ColorDrawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.ArrayList;
import java.util.List;

public class RecordActivity extends AppCompatActivity {
BottomNavigationView bottomNavigationView;
Toolbar toolbar;
RecyclerView recyclerView;
    List<RecordModel> recordModels =new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_record);
        recyclerView =  findViewById(R.id.recyclerViewRecord);
         toolbar = findViewById(R.id.RecordToolbar);
        setSupportActionBar(toolbar);
     //   setTitle("Record");

        RecordAdapter recordAdapter = new RecordAdapter(getApplicationContext(),
                recordModels);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(recordAdapter);

       bottomNavigationView = findViewById(R.id.navigationBar);
        bottomNavigationView.setSelectedItemId(R.id.record_bottomNav);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()){
                    case R.id.home_bottomNav:
                        startActivity(new Intent(getApplicationContext(),MainActivity.class));
                        overridePendingTransition(0,0);
                        return  true;
                    case  R.id.record_bottomNav:
                        return  true;
                    case  R.id.setting_bottomNav:
                        startActivity(new Intent(getApplicationContext(),SettingActivity.class));
                        overridePendingTransition(0,0);
                        return  true;
                }
                return false;
            }
        });

}
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.record_menu,menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id==R.id.info){
            final AlertDialog.Builder alert = new AlertDialog.Builder(RecordActivity.this);
            View mView = getLayoutInflater().inflate(R.layout.record_info_dialog, null);
            Button btn_ok =mView.findViewById(R.id.btnOkRecordInfoDialog);
            alert.setView(mView);
            final  AlertDialog alertDialog = alert.create();
            alertDialog.setCanceledOnTouchOutside(true);
            alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
            btn_ok.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialog.dismiss();
                }
            });
            alertDialog.show();
        }
        else  if (id==R.id.deleteAll) {
            Toast.makeText(getApplicationContext(), "Delete All", Toast.LENGTH_SHORT).show();
        }
        return  true;
    }



    }

活动记录.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bgMain">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/RecordToolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:titleTextAppearance="@style/toolbarTextSize"
        app:title="Record"
        android:theme="@style/RecordActionBar"
        android:background="@color/toolbar"
        app:titleMarginStart="20dp"
        app:titleTextColor="@color/white"
   />

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recyclerViewRecord"
        android:layout_below="@+id/RecordToolbar"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigationBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_margin="0dp"
        android:padding="0dp"
        app:itemBackground="@color/toolbar"
        app:itemIconTint="@drawable/selector"
        app:itemTextColor="@drawable/selector"
        app:menu="@menu/bottom_nav" />
</RelativeLayout>

记录项目.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bgMain"
   >

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/RecordToolbar"
        android:elevation="10dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorPrimaryDark"
            android:padding="10dp"
            >


            <TextView
                android:id="@+id/recordTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Title"
                android:layout_marginBottom="5dp"
                android:textColor="@color/white"
                android:textSize="25sp" />

            <ImageButton
                android:id="@+id/recordDelete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:background="@color/colorPrimaryDark"
                android:padding="0dp"
                android:src="@drawable/ic_delete"

                />

            <TextView
                android:id="@+id/recordCount"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/recordTitle"
                android:text="Count: 44"
                android:textColor="@color/white" />

            <TextView
                android:id="@+id/recordLap"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/recordTitle"
                android:layout_marginStart="10dp"
                android:layout_toRightOf="@+id/recordCount"
                android:text="Lap: 8"
                android:textColor="@color/white" />

            <TextView
                android:id="@+id/recordLimit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/recordTitle"
                android:layout_marginStart="10dp"
                android:layout_toRightOf="@+id/recordLap"
                android:text="Limit: 66"
                android:textColor="@color/white" />

            <TextView
                android:id="@+id/recordTotalCount"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/recordTitle"
                android:layout_marginStart="10dp"
                android:layout_toRightOf="@+id/recordLimit"
                android:text="Total Count: 572"
                android:textColor="@color/white" />


        </RelativeLayout>

    </androidx.cardview.widget.CardView>

</RelativeLayout>

标签: javaandroidandroid-recyclerview

解决方案


因为您将一个空数组传递给适配器

这里 :

 List<RecordModel> recordModels =new ArrayList<>();

在将数组传递给适配器之前尝试使用数据初始化数组。

// 在行之前 alertDialog.dismiss();// 创建列表

List<RecordModel> recordModels =new ArrayList<>();

//然后将您创建的模型添加到列表中

recordModels.add(recordModel)

//然后初始化适配器

RecordAdapter recordAdapter = new RecordAdapter(getApplicationContext(),
                recordModels);

// 最后设置适配器。

recyclerView.setAdapter(recordAdapter);

推荐阅读