据我所知,有很多关于它的信息,但是我还没有找到与我的案例相匹配的信息。如何仅在RealmResults为空时为RecyclerView可靠地显示空视图
我有一个recycleview总是打开的片段,所以片段基本上不会重新创建自己。
这是我的代码来加载适配器。
reLoad(); //method shown below
mRecycler.setAdapter(new SolicitationAdapter(myRealm.where(SolicitationDatabase.class).findAllAsync()));
这是我想出了逻辑:
public void reLoad() {
if (!myRealm.where(SolicitationDatabase.class).findAll().isEmpty()) {
mNothingHere.setVisibility(View.GONE);
mRecycler.setVisibility(View.VISIBLE);
} else {
mNothingHere.setVisibility(View.VISIBLE);
mRecycler.setVisibility(View.GONE);
}
}
它的伟大工程的第一次用户打开应用程序。
当用户创建一条记录时,麻烦就开始了,因为这个片段不会重新创建它,它永远不会重新加载。
在用户添加内容后我无法重新加载的原因是因为添加新记录的方法是从不同的活动调用的单例中。这意味着当我尝试这样做时,在声明recycleview和textview时会出现nullpointerexception。
编辑 - 我尝试(从另一个地方重新加载意见)
我有一个叫PostHelper类,这个类是负责发布的新纪录。
这是构造:
public PostHelper(Context context, Activity activity) {
this.mContext = context;
this.mActivity = activity; //I call this in order to use "findViewById"
这就是后发生:
public String addSolicitation(File _file, boolean fromQueue) {
//loading view
TextView nothingHere = (TextView) mActivity.findViewById(R.id.nothing_here);
RecyclerView recycler = (RecyclerView) mActivity.findViewById(R.id.recycler);
...so on until after the post:
SolicitationAdapter n = new SolicitationAdapter(myRealm.where(SolicitationDatabase.class).findAll());
n.notifyDataSetChanged();
nothingHere.setVisibility(View.GONE);
recycler.setVisibility(View.VISIBLE);
这是堆栈跟踪:
06-01 21:43:37.511 9122-9122/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ga.realm3, PID: 9122
io.reactivex.exceptions.OnErrorNotImplementedException: Attempt to invoke virtual method 'void android.widget.TextView.setVisibility(int)' on a null object reference
编辑2 - 我加载PostHelper类使用以下内容:
mPostHelper = new PostHelper(this, PostSolicitationActivity.this);
请显示堆栈跟踪和其他代码 –
@ cricket_007感谢您指出。我用所需的信息编辑了它。你能帮我吗? – Rosenberg
如果你正在更新领域“从不同的活动”,那么你不应该传递另一个活动的完整引用那里...另外,一个活动是一个上下文,所以你只是重复参数...我不能真正遵循你添加的代码,否则,调用'findViewById'不会像那样工作。你有没有试过只传递TextView和RecyclerView?假设你真的需要他们? –