Я пытаюсь извлечь данные из SQLiteDatabaseHelper
, но в Fragment
данные приходят как нулевые.На Fragment
я проверяю, равен ли DB
0, и показывает ли мне LinearLayout, если он не равен нулю, чем показывает Recycler view
, который я пробовал с ListView, и он работал, но я решил изменить с помощью RecyclerView
, потому что мне нужночтобы сделать больше функций там.
Я создал.
1 ModelView.
2 БД SQLite.
3 Адаптер.
4 Фрагмент.
ModelView.class
public class ReadingList implements Parcelable {
public String Icon;
public String Url;
public String PageTitle;
protected ReadingList(Parcel in) {
}
public ReadingList() {
}
public static final Creator<ReadingList> CREATOR = new Creator<ReadingList>() {
@Override
public ReadingList createFromParcel(Parcel in) {
return new ReadingList(in);
}
@Override
public ReadingList[] newArray(int size) {
return new ReadingList[size];
}
};
public String getIcon() {
return Icon;
}
public void setIcon(String icon) {
Icon = icon;
}
public String getUrl() {
return Url;
}
public void setUrl(String url) {
Url = url;
}
public String getPageTitle() {
return PageTitle;
}
public void setPageTitle(String pageTitle) {
PageTitle = pageTitle;
}
public static Creator<ReadingList> getCREATOR() {
return CREATOR;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ReadingList)) return false;
ReadingList that = (ReadingList) o;
return Objects.equals(Icon, that.Icon) &&
Objects.equals(Url, that.Url) &&
Objects.equals(PageTitle, that.PageTitle);
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public int hashCode() {
return Objects.hash(Icon, Url, PageTitle);
}
@Override
public String toString() {
return "ReadingList{" +
"Icon='" + Icon + '\'' +
", Url='" + Url + '\'' +
", PageTitle='" + PageTitle + '\'' +
'}';
}
}
SQLiteDB.class
public class ReadingListDB extends SQLiteOpenHelper {
private static final String DBHISTORY = "readingList.db";
public static final int DBVERSION = 1;
public static final String TABLE_NAME = "readingList";
private static final String COL1 = "ID";
private static final String COL2 = "name";
public ReadingListDB(Context context) {
super(context, DBHISTORY, null, DBVERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL2 +" TEXT UNIQUE)";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP IF TABLE EXISTS " + DBHISTORY);
onCreate(db);
}
public boolean addData(String item) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, item);
long result = db.insert(TABLE_NAME, null, contentValues);
//if date as inserted incorrectly it will return -1
if (result == -1) {
return false;
} else {
return true;
}
}
public Cursor getData(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor data = db.rawQuery(query, null);
return data;
}
public Cursor getItemID(String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " + COL1 + " FROM " + TABLE_NAME +
" WHERE " + COL2 + " = '" + name + "'";
Cursor data = db.rawQuery(query, null);
return data;
}
Adapter.class
public class ReadingListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
ArrayList<ReadingList> arrayList;
ReadingListDB readingListDB;
public ReadingListAdapter(Context mContext, ArrayList<ReadingList> arrayList) {
this.arrayList = arrayList;
this.mContext = mContext;
}
@NonNull
@Override
public ReadingListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.reading_item, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int i) {
final ViewHolder viewHolder = (ViewHolder) holder;
readingListDB = new ReadingListDB(mContext);
viewHolder.readingListTitle.setText(arrayList.get(i).getPageTitle());
viewHolder.readingListUrl.setText(arrayList.get(i).getUrl());
}
@Override
public int getItemCount() {
return (arrayList == null) ? 0 : arrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView readingListUrl, readingListTitle;
ImageView imgDel, imgFavIcon, imgMove;
public ViewHolder(@NonNull View itemView) {
super(itemView);
readingListUrl = itemView.findViewById(R.id.tvSiteURL);
readingListTitle = itemView.findViewById(R.id.tvSiteTitle);
imgDel = itemView.findViewById(R.id.ivDel);
imgFavIcon = itemView.findViewById(R.id.ivFav);
imgMove = itemView.findViewById(R.id.ivMove);
}
}
}
Fragment.class
public class ReadingListFragment extends Fragment {
View paramView;
LinearLayout linLayoutEmptyLis;
ListView recyclerView;
RecyclerView mRecyclerView;
ReadingListAdapter readingListAdapter;
ImageView showDeleteButton;
ArrayList<ReadingList> arrayList = new ArrayList<>();
public Context mContext;
ReadingListDB readingListDB;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
paramView = inflater.inflate(R.layout.fragment_reading_list, container, false);
linLayoutEmptyLis = paramView.findViewById(R.id.linLayoutEmptyListReading);
mRecyclerView = paramView.findViewById(R.id.lvReading);
mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mRecyclerView.setHasFixedSize(true);
ReadingList readingList = new ReadingList();
readingListDB = new ReadingListDB(getActivity());
readingListAdapter = new ReadingListAdapter(mContext, arrayList);
final Cursor data = readingListDB.getData();
while (data.moveToNext()) {
arrayList.add(readingList);
Log.d("TAG", "onCreateView: " + data + readingList);
}
if (data.getCount() != 0) {
mRecyclerView.setVisibility(View.VISIBLE);
linLayoutEmptyLis.setVisibility(View.GONE);
mRecyclerView.setAdapter(readingListAdapter);
} else {
mRecyclerView.setVisibility(View.GONE);
linLayoutEmptyLis.setVisibility(View.VISIBLE);
}
return paramView;
}
reading_item.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="@drawable/selector_btn_home"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@id/ivDel" style="@style/ImgViewDel" />
<ImageView android:layout_gravity="top" android:id="@+id/ivFav" android:layout_width="16.0dip" android:layout_height="fill_parent" android:layout_marginLeft="6.0dip" android:layout_marginTop="6.0dip" android:scaleType="fitStart" />
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="10.0dip" android:layout_weight="1.0">
<TextView android:textSize="14.0sp" android:textColor="@android:color/black" android:id="@id/tvSiteTitle" android:paddingTop="4.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:lines="2" />
<TextView android:textSize="12.0sp" android:textColor="@color/light_gray" android:id="@id/tvSiteURL" android:paddingBottom="2.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" />
</LinearLayout>
<ImageView android:id="@id/ivMove" style="@style/ImgViewMove" />
</LinearLayout>
fragment_reading_list.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:id="@id/mainContainer" style="@style/ActivityMain"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.RecyclerView android:visibility="gone" android:id="@+id/lvReading"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:listSelector="@android:color/transparent" android:overScrollMode="never" />
<LinearLayout android:gravity="center" android:layout_gravity="center"
android:orientation="vertical" android:id="@+id/linLayoutEmptyListReading" android:clickable="true"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_marginLeft="20.0dip" android:layout_marginTop="-30.0dip"
android:layout_marginRight="20.0dip">
<ImageView android:layout_gravity="center_horizontal" android:layout_width="55.0dip"
android:layout_height="55.0dip" android:src="@drawable/ic_bookmarks_big"
android:scaleType="fitCenter" />
<TextView android:textSize="18.0sp" android:textColor="@color/light_gray_alpha"
android:layout_gravity="center" android:paddingTop="5.0dip" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/BEReadingListModeSegmentControlTitle" />
<TextView android:textSize="12.0sp" android:textStyle="bold" android:textColor="@color/gray"
android:gravity="center" android:layout_gravity="center" android:paddingTop="10.0dip"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="@string/BEReadingListAddInfo" />
<TextView android:textSize="12.0sp" android:textColor="@color/gray"
android:gravity="center" android:layout_gravity="center" android:id="@+id/tvHelp"
android:paddingTop="10.0dip" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>