我是Android的新秀,因此决定将Cloud
Firestore用作我的数据库,并使用它RecyclerView
来填充MainActivity中的列表。我以为Firebase- UI
用于Firestore会超级简单,但我不知道为什么RecyclerView中什么也没有。作为参考,这是Firebase
UI页面
,这是我基于我的应用程序创建的示例代码。我想要做的就是填充用户已保存在数据库中的“课程”列表(Course.java如下所示,因为它只是带有名称,日期等的简单POJO,因此未在下面显示)。
主要活动:
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.Query;
import com.lorin.deadlineschmedline.R;
import com.lorin.deadlineschmedline.adapters.CourseAdapter;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity
implements CourseAdapter.OnCourseSelectedListener,
PopupMenu.OnMenuItemClickListener {
private FirebaseFirestore mFirestore;
private Query mQuery;
private FirebaseUser mCurrentUser;
private RecyclerView.Adapter mAdapter;
private static final String TAG = "MainActivity";
private static final int RC_SIGN_IN = 9001;
private static final int LIMIT = 50;
@BindView(R.id.rv_course_item_list)
RecyclerView mCourseRecyvlerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopup(view);
}
});
// Enable Firestore logging
FirebaseFirestore.setLoggingEnabled(true);
// Firestore
mFirestore = FirebaseFirestore.getInstance();
mQuery = mFirestore.collection("courses").whereEqualTo("name", true).limit(LIMIT);
mAdapter = new CourseAdapter(mQuery, this) {
@Override
protected void onDataChanged() {
// Show/hide content if the query returns empty.
if (getItemCount() == 0) {
mCourseRecyvlerView.setVisibility(View.VISIBLE);
//mEmptyView.setVisibility(View.VISIBLE);
} else {
mCourseRecyvlerView.setVisibility(View.VISIBLE);
//mEmptyView.setVisibility(View.GONE);
}
}
@Override
protected void onError(FirebaseFirestoreException e) {
// Show a snackbar on errors
Snackbar.make(findViewById(android.R.id.content),
"Error: check logs for info.", Snackbar.LENGTH_LONG).show();
}
};
mCourseRecyvlerView.setLayoutManager(new LinearLayoutManager(this));
mCourseRecyvlerView.setAdapter(mAdapter);
}
private void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.add_component_menu, popup.getMenu());
popup.setOnMenuItemClickListener(this);
popup.show();
}
@Override
public void onStart() {
super.onStart();
mAdapter.startListening();
}
@Override
public void onStop() {
super.onStop();
if (mAdapter != null) {
mAdapter.stopListening();
}
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()) {
case R.id.add_course:
startActivity(new Intent(MainActivity.this, AddCourseActivity.class));
return true;
case R.id.add_course_component:
startActivity(new Intent(MainActivity.this, AddCourseComponentActivity.class));
return true;
default:
return true;
}
}
@Override
public void onCourseSelected(DocumentSnapshot restaurant) {
// Go to the details page for the selected activity
Intent intent = new Intent(this, AddCourseActivity.class);
startActivity(intent);
//overridePendingTransition(R.anim.slide_in_from_right, R.anim.slide_out_to_left);
}
}
我尝试使用调试器逐步遍历MainActivity,但是查询数据库时,我无法从Firestore中获得任何收益(可能是问题)。任何想法和反馈将不胜感激!
原来是Firestore查询存在问题。以前,我曾经使用过:
mQuery = mFirestore.collection("courses").whereEqualTo("name", true).limit(LIMIT);
但是,似乎在进行Firestore查询时必须使用orderBy()方法。使用下面的技巧:
mQuery = mFirestore.collection("courses").orderBy("name").limit(LIMIT);
现在,我的数据按预期显示在RecyclerView中。
我试图创建简单的Recyclerview与视图绑定。 问题是我的回收器视图没有分隔线。似乎我所有的物品都是 排成一排。 以下是我的代码: 这里是activity_main。xml: 这里是recyclerview_rows。xml: 房车。Model.kt: RV_Adapter.kt: MainActivity.kt: 有什么问题? [这里是图像:1
问题内容: 我有一个正在使用的。我以前用过但从未遇到过这个问题。 当我上下滚动时,某些项目消失,而某些消失的项目再次出现在底部。 码: : : 问题答案: 重用Views,因此可以说是第一次调用is 。这将导致该行的可见度为。 当又被称为绑定一个新行,该行的观点依然是-没有什么是复位之间势必行。 因此,您的if语句应完全重置状态: 这将确保正确设置每一行的可见性。
我被卡住了。我一直在尝试不同的方法将6个头像字符串的结果加载到picturebox控件数组的加载方法中。 这就是我必须迭代(mysql结果集)值字符串到pictureboxes的内容 但是每个图片框都显示为白色(空白)。如果我将SQL查询设置为LIMIT 1,我将为每个图片框获得相同的第一个头像。但它不会相应地分配,或者根本不会。 我如何才能循环到我的6个图片框正确的网址?谢谢你们 编辑 我也尝试
问题内容: 在使用Hibernate的Spring MVC应用程序中,无法将在ManyToMany关系中连接两个实体的列表正确填充。实体是和。该实体有一个属性,它是名单的实体,而这是不正确填充。有人可以帮我弄清楚如何修正我的代码,以便实体开始正确填充吗? 未能正确填充ArrayList的控制器方法的代码如下: 前面代码中的命令输出以下内容: 从上面的输出可以看到,只有一个对象大于0 。尽管事实是每
当我悬停的时候,我怎样才能填充这个svg?我看了大量的文档,尝试了几种方法,但都没有成功。 这是我的网页: 我在css中尝试了以下内容 以及 甚至 我做错了什么?我应该能够用css完成这项任务,对吗? 编辑:请注意,此图像正被用作背景图像。下面的css中有更多细节: 编辑2:这是. svg代码,但不确定它是否重要
我在带有网格布局管理器的回收器视图中有一个卡片视图。我想删除卡片之间的空间,但也要保留卡片的特定宽度。 这是我的布局活动: 这是我的名片: