【问题标题】:RecyclerView not showing data in fragment from databaseRecyclerView 不显示数据库片段中的数据
【发布时间】:2021-11-06 16:48:40
【问题描述】:

我正在尝试使用 RecyclerView 显示一个列表,但它没有从我的片段中显示。请帮忙 这是我的片段代码:

公共类 ActivityLogSection 扩展 Fragment {

按钮添加活动; DBHelper dbHelper;

ActivityAdapter activityAdapter;
ArrayList<String> activityName, activityTime;


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View rootView =  inflater.inflate(R.layout.activity_log_section, container, false);
    RecyclerView recyclerView =  rootView.findViewById(R.id.recyclerView);
    FragmentActivity ac = getActivity();
    recyclerView.setLayoutManager(new LinearLayoutManager(ac));
    addActivity = rootView.findViewById(R.id.addActivity);

    addActivity.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), AddActivity.class);
            startActivity(intent);
        }
    });


    dbHelper = new DBHelper(getContext());
    activityName = new ArrayList<>();
    activityTime = new ArrayList<>();

    storeActivityDataInArray();

    activityAdapter = new ActivityAdapter(getContext(), activityName, activityTime);
    recyclerView.setAdapter(activityAdapter);


    return rootView;

}


public void storeActivityDataInArray() {
    Cursor cursor = dbHelper.getActivityData();
    if (cursor.getCount() == 0) {
        Toast.makeText(getActivity(), "No data present in the database", Toast.LENGTH_SHORT).show();
    }else {
        while(cursor.moveToNext()) {
            activityName.add(cursor.getString(0));
            activityTime.add(cursor.getString(1));
        }
    }
}

}

这是我的适配器代码:

公共类 ActivityAdapter 扩展 RecyclerView.Adapter {

private Context context;
private ArrayList activityName, activityTime;

public ActivityAdapter(Context context, ArrayList activityName, ArrayList activityTime) {

    this.context = context;
    this.activityName = activityName;
    this.activityTime = activityTime;
}

@NonNull
@Override
public ActivityAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.recyclerview_layout, parent, false);
    return new MyViewHolder(view);
}

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


    holder.activityName.setText(String.valueOf(activityName.get(position)));
    holder.activityTime.setText(String.valueOf(activityTime.get(position)));
}

@Override
public int getItemCount() {
    return 0;
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    TextView activityName, activityTime;
    LinearLayout recyclerview_layout;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        activityName = itemView.findViewById(R.id.tvActivityName);
        activityTime = itemView.findViewById(R.id.tvActivityTime);
        recyclerview_layout = itemView.findViewById(R.id.recyclerViewLayout);
    }
}

}

这是 AddActivity 部分的代码:

公共类 AddActivity 扩展 AppCompatActivity {

EditText etActivityName, etActivityTime;
Button addBtn;
Calendar calendar;
SimpleDateFormat simpleDateFormat;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add);

    etActivityName = findViewById(R.id.etActivityName);
    etActivityTime = findViewById(R.id.etActivityTime);
    addBtn = findViewById(R.id.addBtn);

// String acLog = etActivity.getText().toString().trim() + " - " + simpleDateFormat.format(calendar.getTime());

    etActivityTime.setInputType(InputType.TYPE_NULL);
    etActivityTime.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDateAndTimeDialog(etActivityTime);
        }
    });
    calendar = showDateAndTimeDialog(etActivityTime);
    simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm");

    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DBHelper dbHelper = new DBHelper(AddActivity.this);

            String activityName = etActivityName.getText().toString().trim();
            String activityTime = simpleDateFormat.format(calendar.getTime());
            dbHelper.addActivity(activityName, activityTime);

        }
    });
}

private Calendar showDateAndTimeDialog(EditText date_time_input) {
    Calendar calendar = Calendar.getInstance();

    DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month);
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            android.app.TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                    calendar.set(Calendar.MINUTE, minute);

                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm");

                    date_time_input.setText(simpleDateFormat.format(calendar.getTime()));
                }
            };
            new TimePickerDialog(AddActivity.this, timeSetListener,  calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), false).show();
        }
    };
    new DatePickerDialog(this, dateSetListener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
    return calendar;
}

}

我不明白为什么会这样,请帮助我

【问题讨论】:

  • 值被添加到数据库中,但没有添加到recyclerView
  • 那是因为您在 public int getItemCount() {} 上返回 0 - 所以您的 recyclerview 将填充 0 个项目

标签: android android-studio android-fragments


【解决方案1】:

getItemCount() 方法的内部适配器类应该传递您的实际列表大小而不是 0

@Override
public int getItemCount() {
return 0; //here pass your list size(activityName.size())
}

【讨论】:

  • 非常感谢!!!我不知道这件事,卡了将近 5 天,但现在已经解决了。
猜你喜欢
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2020-07-02
  • 2020-07-19
  • 2021-11-07
相关资源
最近更新 更多