【发布时间】:2021-03-19 17:39:39
【问题描述】:
在尝试加载我正在构建的“日志查看器”时,原始预设布局不会显示为输出。我确实从我的 Firebase 数据库中获得了适当的输出,但是布局完全混乱/间隔太远。我做错了什么?
这是我的 LogActivity 类 公共类 LogActivity 扩展 AppCompatActivity {
List<Log> log;
RecyclerView recyclerView;
LogAdapter logAdapter;
DatabaseReference databaseReference;
DatabaseReference mbase; // Create object of the
// Firebase Realtime Database
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log);
recyclerView=findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
log=new ArrayList<>();
databaseReference = FirebaseDatabase.getInstance().getReference("Logs");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot ds: snapshot.getChildren())
{
Log data = new Log(ds.getValue(String.class));
log.add(data);
}
logAdapter = new LogAdapter(log);
recyclerView.setAdapter(logAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
我的适配器类如下图所示: 公共类 LogAdapter 扩展 RecyclerView.Adapter {
List<Log> logList;
public LogAdapter(List<Log> logList) {
this.logList = logList;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.log_layout, parent,false);
ViewHolderClass viewHolderClass = new ViewHolderClass(view);
return viewHolderClass;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHolderClass viewHolderClass=(ViewHolderClass)holder;
Log log=logList.get(position);
viewHolderClass.lockState.setText(log.getLockState());
}
@Override
public int getItemCount() {
return logList.size();
}
public class ViewHolderClass extends RecyclerView.ViewHolder{
TextView lockState;
public ViewHolderClass(@NonNull View itemView) {
super(itemView);
lockState=itemView.findViewById(R.id.log_string);
}
}
所有这些都与我的“日志”类互锁,该类只保存来自我的 firebase 数据库的字符串
公共类日志{
private String lockState;
public Log() {
}
public Log(String lockState) {
this.lockState = lockState;
}
public String getLockState() {
return lockState;
}
public void setLockState(String lockState) {
this.lockState = lockState;
}
以下是我的活动日志的 XML
<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:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cardBackground"
tools:context=".LogActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="4dp"
android:layout_marginTop="4dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
我的 log_layout 文件的 XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/log_layout"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/log_string"
android:text="20sp"
android:textColor="@android:color/black">
</TextView>
最后是我成功获取和显示的简单字符串:
这里有我的实际输出: (向下滚动,下一个输出就在那里)
【问题讨论】:
-
请编辑您的问题并将您的数据库结构添加为 JSON 文件或至少是屏幕截图。
-
我已经编辑了这个问题,希望现在更清楚:)
标签: java android firebase firebase-realtime-database android-recyclerview