切换到片段后 RecyclerView 不显示任何内容

时间:2021-06-20 12:10:29

标签: android android-fragments android-recyclerview

我的代码允许用户输入数据,然后将数据保存到 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;
    }
}

0 个答案:

没有答案