java - 通过检查光标是否为空来设置 textview 和 recycleview 的可见性
问题描述
我正在尝试添加消息说没有数据并且从光标获取数据的recycleview是空的我尝试了很多解决方案但没有任何效果
这是主要活动:
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);
}
}
我在 oncreate 方法中试过这个:
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() 方法
我在加载器的 onStartLoading() 中尝试了这段代码:
@Override
protected void onStartLoading() {
if (inventoryData != null) {
emptyList.setVisibility(View.GONE);
deliverResult(inventoryData);
} else {
forceLoad();
}
}
emptylist textview 消失了,但是当 recycleview 为空且不为空时,它在所有语句中都消失了
我在上面的代码中尝试了这个:
emptyList.setVisibility(View.VISIBLE);
但不起作用
我也试过这个:
if (mAdapter.getItemCount() == 0) {
emptyList.setVisibility(View.VISIBLE);
} else {
emptyList.setVisibility(View.GONE);
}
在 oncreate 方法中,但应用程序崩溃了
解决方案
检查游标是否“有效”的方法是
((cursor != null) && (cursor.getCount() > 0))
推荐阅读
- azure-pipelines - 无法在 Azure 上为 ARM64 上的模块构建映像以用于 iotedge 管道
- r - 由 / 分隔的嵌套列表的列
- php - Wordpress wp_send_json_success() 成功返回 undefined
- sql - 连接两个表以保留选定的值和空值
- python - 终端找不到 PyCharm 中导入的模块
- python - 获取主键 django 的问题
- swift - 如何在swiftui中修改传递给活动工作表的变量
- java - 这段代码如何遍历 HashMap 的 Integer 值?
- java - Spring Boot REST - 即使具有唯一路径变量,映射也不明确
- ios - 跨 SwiftUI 应用程序共享数据:更好的模式选择?