Я создаю приложение, которое позволяет пользователям добавлять «карточки активности» в расписание во время создания расписания.
- My footeritem находится в адаптере RecyclerView, который называется HFAdapter. Этот адаптер входит в мой класс «Расписание».
- Когда пользователь нажимает «добавить карту активности» в нижнем колонтитуле , я хочу, чтобы представление переработчика класса CardLibrary открывалось в диалоговом окне . Мой класс CardLibrary представляет собой отдельное действие для Android и имеет собственный адаптер для повторного просмотра с именем LibraryArrAdapter с 3 столбцами. Он отображает все карты в базе данных SQLite. Причина, по которой я создал новый LibraryArrAdapter в своем классе HFAdapter, заключается в том, что я хочу изменить количество столбцов на 2.
- Как только пользователь выбирает карточку в диалоге , диалоговое окно закрывается и карточка появляется в расписании .
- Мой LibraryArrAdapter работает отлично, так как он дает мне результаты, которые я хочу получить для своего класса CardLibrary.
- Все карточки пользователя хранятся в базе данных SQLite со столбцами для заголовка, изображения и Activity_duration. Но я просто хочу отобразить заголовок и изображение в моем классе «Расписание».
- Мой класс 'Schedule' все еще является новым занятием, и я ничего с ним не сделал, поэтому я не включил его коды классов ниже.
В классе HFAdapter у меня уже есть объект 'card' (экземпляр CardListItem), в котором хранится заголовок и изображение карты, выбранной пользователем в диалоговом окне, в конструкторе MyViewHolder. Как мне добавить этот объект карты в ArrayList и сделать так, чтобы нижний колонтитул всегда оставался последним элементом в ArrayList? Я делаю это в классе HFAdapter?
Чтобы получить элемент нижнего колонтитула в адаптере, мои методы и классы в основном основаны на https://demonuts.com/android-recyclerview-with-header-and-footer/.
Я действительно надеюсь получить некоторую помощь, так как потратил слишком много дней на это.
Класс HFAdapter:
public class HFAdapter extends RecyclerView.Adapter<HFAdapter.MyViewHolder> {
RecyclerView recyclerView;
public static final int Normal = 1;
public static final int Footer = 2;
private LayoutInflater inflater;
private ArrayList<CardListItem> cardItemArrayList;
CardListItem card;
DatabaseHelper dbHelper;
SQLiteDatabase db;
Context context;
Cursor cursor;
byte[] image;
public HFAdapter(Context context, ArrayList<CardListItem> cardItemArrayList){
inflater = LayoutInflater.from(context);
this.cardItemArrayList = cardItemArrayList;
}
class MyViewHolder extends RecyclerView.ViewHolder
{
TextView cardTitle;
ImageView imageView;
LinearLayout list_item,add_card;
public MyViewHolder(View itemView, int viewType) {
super(itemView);
if(viewType == Normal) {
cardTitle = itemView.findViewById(R.id.activity_title);
imageView = itemView.findViewById(R.id.imgView);
list_item = itemView.findViewById(R.id.schedule_list_item);
}else if(viewType == Footer){
add_card = itemView.findViewById(R.id.add_card);
add_card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CardLibrary cardLib = new CardLibrary();
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.activity_card_library);
recyclerView = dialog.findViewById(R.id.myRecyclerView);
int numberOfColumns = 2;
recyclerView.setLayoutManager(new GridLayoutManager(context, numberOfColumns));
LibraryArrAdapter adapter = new LibraryArrAdapter(context,cardLib.getAllCards());
recyclerView.setAdapter(adapter);
dialog.show();
final Dialog thisDialog = dialog;
LinearLayout a_card = recyclerView.findViewById(R.id.single_card);
dbHelper = new DatabaseHelper(context);
db = dbHelper.getReadableDatabase();
a_card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView txtvw_title = recyclerView.findViewById(R.id.item_title);
String title = txtvw_title.getText().toString();
cursor = db.rawQuery("SELECT image WHERE title=?",new String[]{title});
if(cursor.getCount()>0) {
cursor.moveToFirst();
image = cursor.getBlob(cursor.getColumnIndex(DatabaseHelper.COLUMN_IMAGE));
}
card = new CardListItem(title,image);
thisDialog.dismiss();
}
});
}
});
}
}
}
public void addCard(CardListItem card){
cardItemArrayList.add(card);
this.notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if(cardItemArrayList.get(position).getViewType().equals("footer")){
return Footer;
}else {
return Normal;
}
}
@NonNull
@Override
public HFAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view ;
MyViewHolder holder;
switch (viewType){
case Normal:
view = inflater.inflate(R.layout.schedule_row_layout, parent, false);
holder = new MyViewHolder(view , Normal);
break;
case Footer:
view = inflater.inflate(R.layout.blank_row_layout, parent, false);
holder = new MyViewHolder(view , Footer);
break;
default:
view = inflater.inflate(R.layout.blank_row_layout, parent, false);
holder = new MyViewHolder(view , Normal);
break;
}
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
if(cardItemArrayList.get(position).getViewType().equals("normal")) {
holder.cardTitle.setText(card.getTitle());
holder.imageView.setImageBitmap(card.getImage());
}//cardItemArrayList.get(position)
}
@Override
public int getItemCount() {
return cardItemArrayList.size();
}
}
Класс CardListItem: (для 1 элемента в HFAdapter Arraylist)
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class CardListItem {
String title;
byte[] image;
String viewType;
public CardListItem(String activityName, byte[] image){
this.title = activityName;
this.image = image;
}
public String getViewType(){
return viewType;
}
public void setViewType(String viewType){
this.viewType = viewType;
}
public String getTitle() {
return title;
}
public void setTitle(String text) {
this.title = text;
}
public Bitmap getImage(){
Bitmap b = BitmapFactory.decodeByteArray(image,0,image.length);
return b;
}
public void setImage(byte[] image) {
this.image = image;
}
}
Заранее большое спасибо!