通过检查光标是否为空来设置文本视图和回收视图的可见性



我正在尝试添加消息说没有数据和从光标获取数据的回收视图为空 我尝试了许多解决方案,但没有任何效果

这是主要活动:

public class MainActivity extends AppCompatActivity implements
LoaderManager.LoaderCallbacks<Cursor> {
private static final String TAG = MainActivity.class.getSimpleName();
private static final int INVENTORY_LOADER_ID = 0;
private CursorAdapter mAdapter;
RecyclerView mRecyclerView;
TextView emptyList;
Cursor inventoryData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.inventories);
emptyList = (TextView) findViewById(R.id.empty_list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new CursorAdapter(this, this, this);
mRecyclerView.setAdapter(mAdapter);
getSupportLoaderManager().initLoader(INVENTORY_LOADER_ID, null, this);
}

@Override
protected void onResume() {
super.onResume();
getSupportLoaderManager().restartLoader(INVENTORY_LOADER_ID, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, final Bundle loaderArgs) {
return new AsyncTaskLoader<Cursor>(this) {
Cursor inventoryData = null;
@Override
protected void onStartLoading() {
if (inventoryData != null) {
emptyList.setVisibility(View.GONE);
deliverResult(inventoryData);
} else  {
forceLoad();
}
}
@Override
public Cursor loadInBackground() {
try {
return getContentResolver().query(InventoryContract.InventoryEntry.CONTENT_URI,
null,
null,
null,
InventoryContract.InventoryEntry.COLUMN_ID);
} catch (Exception e) {
Log.e(TAG, "Failed to asynchronously load data.");
e.printStackTrace();
return null;
}
}
public void deliverResult(Cursor data) {
inventoryData = data;
super.deliverResult(data);
}
};
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}

我在创建方法中尝试了这个:

mRecyclerView.setEmptyView(emptyList);

但它似乎不适用于 recycleview,所以我尝试了:

if (inventoryData.isEmpty()) {
mRecyclerView.setVisibility(View.GONE);
emptyList.setVisibility(View.VISIBLE);
}
else {
mRecyclerView.setVisibility(View.VISIBLE);
emptyList.setVisibility(View.GONE);
}

但我无法解析 isEmpty(( 方法

我尝试在加载器的 onStartLoad(( 中编写了这段代码:

@Override
protected void onStartLoading() {
if (inventoryData != null) {
emptyList.setVisibility(View.GONE);
deliverResult(inventoryData);
} else {
forceLoad();
}
}

空列表文本视图消失了,但是当回收视图为空而不是为空时,它在所有语句中都消失了

我在上面的代码的其他代码中尝试了这个:

emptyList.setVisibility(View.VISIBLE);

但不起作用

我也试过这个:

if (mAdapter.getItemCount() == 0) {
emptyList.setVisibility(View.VISIBLE);
} else {
emptyList.setVisibility(View.GONE);
}

在oncreate方法中,但应用程序被压碎了

检查游标是否"有效"的方法是

((cursor != null) && (cursor.getCount() > 0))

最新更新