我的代码允许用户输入数据,然后将数据保存到 SQLite 数据库中,然后显示在 RecyclerView
上。后来,我创建了一个导航滑块,所以一切都在片段中。我将我的 RecyclerView
代码移到我的片段类中,但它似乎没有显示,它显示了一条吐司消息,上面写着“无数据”(将在下面的代码中显示)。我对这些东西很陌生,所以可能会有愚蠢的错误,但如果您能找到我的代码有什么问题,我们将不胜感激。
片段代码:
RecyclerView recyclerView;
myDatabase myDB;
ArrayList<String> task_id, task_subject, task_description, task_due_date;
CustomAdapter customAdapter;
RecyclerView.LayoutManager layoutManager;
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tasks, container, false);
recyclerView = view.findViewById(R.id.recyclerTasks);
myDB = new myDatabase(getActivity());
task_id = new ArrayList<>();
task_subject = new ArrayList<>();
task_description = new ArrayList<>();
task_due_date = new ArrayList<>();
customAdapter = new CustomAdapter(getActivity(), task_id, task_subject, task_description, task_due_date);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setAdapter(customAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
storeDataArray();
return inflater.inflate(R.layout.fragment_tasks, container, false);
}
@Override
public void onResume() {
super.onResume();
storeDataArray();
}
void storeDataArray() {
Cursor cursor = myDB.readAllData();
if (cursor.getCount() == 0) {
Toast.makeText(getActivity(), "No data", Toast.LENGTH_SHORT).show();
} else {
while (cursor.moveToNext()) {
task_id.add(cursor.getString(0));
task_subject.add(cursor.getString(1));
task_description.add(cursor.getString(2));
task_due_date.add(cursor.getString(3));
}
}
}
}
适配器代码:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.myViewHolder> {
private Context context;
private ArrayList task_id, task_subject, task_description, task_due_date;
CustomAdapter(Context context, ArrayList task_id, ArrayList task_subject, ArrayList task_description, ArrayList task_due_date){
this.context = context;
this.task_id = task_id;
this.task_description = task_description;
this.task_subject = task_subject;
this.task_due_date = task_due_date;
}
@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from (context);
View view = inflater.inflate(R.layout.to_do_list, parent, false);
return new myViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull myViewHolder holder, final int position) {
holder.taskid_txt.setText(String.valueOf(task_id.get(position)));
holder.taskSubject_txt.setText(String.valueOf(task_subject.get(position)));
holder.taskDescription_txt.setText(String.valueOf(task_description.get(position)));
holder.taskDate_txt.setText(String.valueOf(task_due_date.get(position)));
holder.mainLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, UpdateActivity.class);
intent.putExtra("id", String.valueOf(task_id.get(position)));
intent.putExtra("description", String.valueOf(task_description.get(position)));
intent.putExtra("subject", String.valueOf(task_subject.get(position)));
intent.putExtra("dueDate", String.valueOf(task_due_date.get(position)));
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return task_id.size();
}
public class myViewHolder extends RecyclerView.ViewHolder {
TextView taskid_txt, taskSubject_txt, taskDescription_txt, taskDate_txt;
LinearLayout mainLayout;
public myViewHolder(@NonNull View itemView) {
super(itemView);
taskid_txt = itemView.findViewById(R.id.taskid_txt);
taskSubject_txt = itemView.findViewById(R.id.taskSubject_txt);
taskDescription_txt = itemView.findViewById(R.id.taskDescription_txt);
taskDate_txt = itemView.findViewById(R.id.taskDate_txt);
mainLayout = itemView.findViewById(R.id.mainLayout);
}
}
;
}
数据库代码(包含一些其他表,我删掉了一些不需要的部分):
public class myDatabase extends SQLiteOpenHelper {
private Context context;
private static final String DB_name = "allTasks.db";
private static final int DB_version = 4;
private static final String TABLE_NAME = "my_tasks";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_TITLE = "task_title";
private static final String COLUMN_DESCRIPTION = "task_description";
private static final String COLUMN_DUE_DATE = "due_date";
private static final String TABLESUBJECTS = "subjects";
private static final String ADDSUBJECT = "add_subject";
public myDatabase(@Nullable Context context) {
super(context, DB_name, null, DB_version);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_NAME +
" (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_TITLE + " TEXT, " +
COLUMN_DESCRIPTION + " TEXT, " +
COLUMN_DUE_DATE + " INTEGER);";
db.execSQL(query);
String addSubject = "CREATE TABLE " + TABLESUBJECTS +
"(" + ADDSUBJECT + " TEXT);";
db.execSQL(addSubject);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + TABLESUBJECTS);
onCreate(db);
}
void addTask(String subject, String description, Integer dueDate) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_TITLE, subject);
cv.put(COLUMN_DESCRIPTION, description);
cv.put(COLUMN_DUE_DATE, dueDate);
long result = db.insert(TABLE_NAME, null, cv);
if (result == -1) {
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show();
}
}
Cursor readAllData() {
String query = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if (db != null) {
cursor = db.rawQuery(query, null);
}
return cursor;
}
}