java - 为什么数据没有显示在 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>
解决方案
因为您将一个空数组传递给适配器
这里 :
List<RecordModel> recordModels =new ArrayList<>();
在将数组传递给适配器之前尝试使用数据初始化数组。
// 在行之前 alertDialog.dismiss();
// 创建列表
List<RecordModel> recordModels =new ArrayList<>();
//然后将您创建的模型添加到列表中
recordModels.add(recordModel)
//然后初始化适配器
RecordAdapter recordAdapter = new RecordAdapter(getApplicationContext(),
recordModels);
// 最后设置适配器。
recyclerView.setAdapter(recordAdapter);
推荐阅读
- python - 在多处理期间附加到列表
- haskell - 如何使用haskell以定义的数据类型返回列表中的项目数
- python - 训练这个模型会导致内存泄漏
- python - 如何检查子集是否包含在列表中?
- java - 无法获取加入延迟初始化的集合
- lua - 为什么下面的代码没有给出任何结果?
- r - 映射和left_joining 两个列表在一起
- servicestack - ServiceStack - 在请求过滤器之前调用 [Authenticate] 属性。不适用于 OrmLiteMultitenancyAuthRepository / OrmLiteCacheClient
- android - 如何在画布中的弧线笔划上应用radialGradient
- sql-server - 如何在不使用循环的情况下更新 SQL Server 中两组不同条件之间的行