Ни как не получается отобразить recyclerview во fragment
Код в MainActivity работает как надо, но стоит перенести все во Fragment, то ноль. До этого задавал вопрос на эту тему, ошибку нашел в том, что не передавались данные из БД, начал логировать и нашел ошибку ("_id"); а было ("id"); после этого логи начали показывать данные в таблице, но не отображаются..
Взял проект с ютуба подумав, может с моим проектом не так, просто изменив с Main на Fragment
public class IncomeFragment extends Fragment implements View.OnClickListener {
private static final String TAG = "myLog";
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private MyDatabaseHelper dbHelper;
private CustomAdapter customAdapter;
private FloatingActionButton add_btn;
ViewGroup viewGroup;
ArrayList<String> book_id, book_title, book_author, book_pages;
public void IncomeFragment() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
viewGroup = (ViewGroup) inflater.inflate(R.layout.income_fragment, container, false);
mRecyclerView = (RecyclerView) viewGroup.findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
Log.e(TAG,"Полученны данные");
mLayoutManager = new LinearLayoutManager(getContext());
dbHelper = new MyDatabaseHelper(getActivity());
customAdapter = new CustomAdapter(getActivity(),getContext(),book_id, book_title, book_author,
book_pages);
mRecyclerView.setAdapter(customAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
initFabMenu();
storeDataInArrays();
dbHelper = new MyDatabaseHelper(getActivity());
book_id = new ArrayList<>();
book_title = new ArrayList<>();
book_author = new ArrayList<>();
book_pages = new ArrayList<>();
return viewGroup;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.add_btn:
//Toast.makeText(getContext(),"Переход",Toast.LENGTH_LONG).show();
startActivity(new Intent(getActivity(), AddActivity.class));
break;
}
}
private void initFabMenu(){
add_btn = viewGroup.findViewById(R.id.add_btn);
add_btn.setOnClickListener(this);
}
void storeDataInArrays(){
try {
Log.e(TAG,"Удалось считать данные");
Cursor cursor = dbHelper.readAllData();
if(cursor.getCount() == 0){
Toast.makeText(getContext(),"Нет данных",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getContext(),"Есть даныые",Toast.LENGTH_LONG).show();
while (cursor.moveToNext()){
book_id.add(cursor.getString(0));
book_title.add(cursor.getString(1));
book_author.add(cursor.getString(2));
book_pages.add(cursor.getString(3));
}
}
} catch (Exception e) {
Log.e(TAG,"Не удалось считать данные");
}
}
}
DB
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "myLog";
private Context context;
private static final String DATABASE_NAME = "MyBook.db";
private static final int DATABASE_VERSION = 6;
private static final String TABLE_NAME = "book";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_TITLE = "book_title";
private static final String COLUMN_AUTHOR = "book_author";
private static final String COLUMN_PAGES = "book_pages";
public MyDatabaseHelper(@Nullable Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
Log.e(TAG, "База создана");
String query = "CREATE TABLE " + TABLE_NAME +
" (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_TITLE + " TEXT, " +
COLUMN_AUTHOR + " TEXT, " +
COLUMN_PAGES + " INTEGER);";
db.execSQL(query);
} catch (SQLException e) {
Log.e(TAG, "Ошибка создание БД");
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void addBook(String title, String author, int pages) {
try {
Log.e(TAG, " удалось записать данные в БД");
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_TITLE, title);
cv.put(COLUMN_AUTHOR, author);
cv.put(COLUMN_PAGES, pages);
long result = db.insert(TABLE_NAME, null, cv);
if (result == -1) {
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Added Successfully!", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
Log.e(TAG, "Не удалось записать данные в БД");
}
}
public Cursor readAllData(){
String query = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Log.e(TAG, "--- Таблицы в моей БД: ---");
// делаем запрос всех данных из таблицы mytable, получаем Cursor
Cursor c = db.rawQuery(query, null);
// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
if (c.moveToFirst()) {
// определяем номера столбцов по имени в выборке
int idColIndex = c.getColumnIndex("_id");
int book_title = c.getColumnIndex("book_title");
int book_author = c.getColumnIndex("book_author");
int book_pages = c.getColumnIndex("book_pages");
do {
// получаем значения по номерам столбцов и пишем все в лог
Log.e(TAG,
"ID = " + c.getInt(idColIndex) +
", book_title = " + c.getString(book_title) +
", book_author = " + c.getString(book_author) +
", book_pages = " + c.getString(book_pages));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (c.moveToNext());
} else
Log.e(TAG, "0 rows");
c.close();
return c;
}
public void updateData(String row_id, String title, String author, String pages){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_TITLE, title);
cv.put(COLUMN_AUTHOR, author);
cv.put(COLUMN_PAGES, pages);
long result = db.update(TABLE_NAME, cv, "_id=?", new String[]{row_id});
if(result == -1){
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(context, "Updated Successfully!", Toast.LENGTH_SHORT).show();
}
}
public void deleteOneRow(String row_id){
SQLiteDatabase db = this.getWritableDatabase();
long result = db.delete(TABLE_NAME, "_id=?", new String[]{row_id});
if(result == -1){
Toast.makeText(context, "Failed to Delete.", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Successfully Deleted.", Toast.LENGTH_SHORT).show();
}
}
public void deleteAllData(){
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE FROM " + TABLE_NAME);
}
}
Adapter
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private static final String TAG = "myLog";
private Context context;
private Activity activity;
private ArrayList<String> book_id, book_title, book_author, book_pages;
public CustomAdapter(Activity activity, Context context, ArrayList<String> book_id,
ArrayList<String> book_title, ArrayList<String> book_author,
ArrayList<String> book_pages){
this.activity = activity;
this.context = context;
this.book_id = book_id;
this.book_title = book_title;
this.book_author = book_author;
this.book_pages = book_pages;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.my_row, parent, false);
return new MyViewHolder(viewGroup);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
try {
Log.e(TAG,"Holder передал данные");
holder.book_id_txt.setText(String.valueOf(book_id.get(position)));
holder.book_title_txt.setText(String.valueOf(book_title.get(position)));
holder.book_author_txt.setText(String.valueOf(book_author.get(position)));
holder.book_pages_txt.setText(String.valueOf(book_pages.get(position)));
//Recyclerview onClickListener
holder.mainLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, UpdateActivity.class);
intent.putExtra("_id", String.valueOf(book_id.get(position)));
intent.putExtra("title", String.valueOf(book_title.get(position)));
intent.putExtra("author", String.valueOf(book_author.get(position)));
intent.putExtra("pages", String.valueOf(book_pages.get(position)));
activity.startActivityForResult(intent, 1);
}
});
} catch (Exception e) {
Log.e(TAG,"Не удалось передать Holder");
}
}
@Override
public int getItemCount() {
//return book_id.size();
return (book_id == null) ? 0 : book_id.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView book_id_txt, book_title_txt, book_author_txt, book_pages_txt;
LinearLayout mainLayout;
MyViewHolder(@NonNull View itemView) {
super(itemView);
book_id_txt = itemView.findViewById(R.id.book_id_txt);
book_title_txt = itemView.findViewById(R.id.book_title_txt);
book_author_txt = itemView.findViewById(R.id.book_author_txt);
book_pages_txt = itemView.findViewById(R.id.book_pages_txt);
mainLayout = itemView.findViewById(R.id.mainLayout);
//Animate Recyclerview
Animation translate_anim = AnimationUtils.loadAnimation(context, R.anim.translate_anim);
mainLayout.setAnimation(translate_anim);
}
}
}