【发布时间】:2018-07-06 00:28:52
【问题描述】:
在过去的几个小时里,我一直在尝试为我的 RecyclerView 安装一个空视图。我发现的解决方案涉及创建新类并将空视图作为 XML 中的回收器视图放置在级别上。我理解后者,但我还没有看到用于 SQLite 数据库的 Java 解决方案。我使用的尝试将放入emptyview,但不会显示recyclerview 信息。有人可以帮我解决这个问题吗?
这是我的活动:
public class DisplayActivity extends AppCompatActivity implements
LoaderManager.LoaderCallbacks<Cursor>{
private static final int PRESCRIPTION_LOADER = 0;
private CustomCursorAdapter mAdapter;
RecyclerView mRecyclerView;
private static final String TAG = "MainTagName";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
ViewGroup emptyView = findViewById(R.id.empty_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL));
mAdapter = new CustomCursorAdapter(this);
mRecyclerView.setAdapter(mAdapter);
if (mAdapter.getItemCount()==0) {
mRecyclerView.setVisibility(View.GONE);
emptyView.setVisibility(View.VISIBLE);
}else {
mRecyclerView.setVisibility(View.VISIBLE);
emptyView.setVisibility(View.GONE);
}
//Kick off the loader
getLoaderManager().initLoader(PRESCRIPTION_LOADER,null,this);
//….
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
//….
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
Log.i(TAG,"Loader Manager Loading Finished: " + data.getCount());
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}
这是我的 RecyclerView 适配器:
public class CustomCursorAdapter extends
RecyclerView.Adapter<CustomCursorAdapter.MyTaskViewHolder>{
private Cursor mCursor;
private Context mContext;
public CustomCursorAdapter (Context mContext){
this.mContext = mContext;
}
@Override
public MyTaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_item, parent, false);
return new MyTaskViewHolder (view);
}
@Override
public void onBindViewHolder(CustomCursorAdapter.MyTaskViewHolder holder, int position) {
mCursor.moveToPosition(position);
//….
}
@Override
public int getItemCount() {
if (mCursor ==null){
return 0;
}
return mCursor.getCount();
}
public Cursor swapCursor(Cursor c) {
if (mCursor == c){
return null;
}
Cursor temp = mCursor;
this.mCursor = c;
if (c != null){
this.notifyDataSetChanged();
}
return temp;
}
class MyTaskViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//….
这是我的 RecyclerView XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.cloiud.DisplayActivity"
tools:showIn="@layout/activity_display">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<include layout="@layout/empty_view"/>
这是我的空视图 XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:gravity="center">
//....
【问题讨论】:
标签: android sqlite android-recyclerview