Java 有没有办法防止跳过recyclerview的布局?
应用程序基本上只是一个简单的待办事项列表,但当我添加新任务时,它会出现在firebase上,但不会出现在我的应用程序上,给出错误信息 “E/RecyclerView:未连接适配器;跳过布局”。 我试图按照stackoverflow上的答案来修复它,但没有一个对我有帮助,可能是我错误地将调整调整适应了我的代码。我只是在学习,这是我的第一个项目,我是按照一个教程来做的。 无论如何,这是MainActivity.java:Java 有没有办法防止跳过recyclerview的布局?,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,应用程序基本上只是一个简单的待办事项列表,但当我添加新任务时,它会出现在firebase上,但不会出现在我的应用程序上,给出错误信息 “E/RecyclerView:未连接适配器;跳过布局”。 我试图按照stackoverflow上的答案来修复它,但没有一个对我有帮助,可能是我错误地将调整调整适应了我的代码。我只是在学习,这是我的第一个项目,我是按照一个教程来做的。 无论如何,这是MainActivity.java: @Override protected void onCreate(B
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent a = new Intent(MainActivity.this, AggiungiPiattoAttivity.class);
startActivity(a);
}
});
//working with data
ourdoes = findViewById(R.id.ourdoes);
ourdoes.setLayoutManager(new LinearLayoutManager(this));
list = new ArrayList<MyDoes>();
//get data from firebase
reference = FirebaseDatabase.getInstance(URL).getReference().child("AppLista");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//set code to retrive data and replace layout
for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
{
MyDoes p = dataSnapshot1.getValue(MyDoes.class);
list.add(p);
}
doesAdapter = new DoesAdapter(MainActivity.this, list);
ourdoes.setAdapter(doesAdapter);
doesAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
//set code to show an error
Toast.makeText(getApplicationContext(), "No Data", Toast.LENGTH_SHORT).show();
}
});
}
这是我的适配器类:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aggiungi_piatto_attivity);
buttonaddnewpiatto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//insert data to database
reference = FirebaseDatabase.getInstance(URL).getReference().child("BoxDoese").child("Does" + doesNum);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dataSnapshot.getRef().child("titledoes").setValue(addnamenewpiattosetted.getText().toString());
dataSnapshot.getRef().child("descdoes").setValue(adddescnewpiattosetted.getText().toString());
dataSnapshot.getRef().child("qualcosaalpostodiunimmagine").setValue(addrecipenewpiattosetted.getText().toString());
Intent a = new Intent( AggiungiPiattoAttivity.this, MainActivity.class);
startActivity(a);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
});
public class DoesAdapter extends RecyclerView.Adapter<DoesAdapter.MyViewHolder> {
Context context;
ArrayList<MyDoes> myDoes;
public DoesAdapter(){
}
public DoesAdapter(Context c, ArrayList<MyDoes> p ){
context = c;
myDoes=p;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_does, viewGroup, false));
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
myViewHolder.titledoes.setText(myDoes.get(i).getTitledoes());
myViewHolder.qualcosaalpostodiunimmagine.setText(myDoes.get(i).getQualcosaalpostodiunimmagine());
myViewHolder.descdoes.setText(myDoes.get(i).getDescdoes());
}
@Override
public int getItemCount() {
return myDoes.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView titledoes, descdoes, qualcosaalpostodiunimmagine;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
titledoes = (TextView) itemView.findViewById(R.id.titledoes);
qualcosaalpostodiunimmagine = (TextView) itemView.findViewById(R.id.qualcosaalpostodiunimmagine);
descdoes = (TextView) itemView.findViewById(R.id.descdoes);
}
}
}
公共类DoesAdapter扩展了RecyclerView.Adapter{
语境;
ArrayList MyDos;
公共DoesAdapter(){
}
公共DoesAdapter(上下文c,数组列表p){
上下文=c;
mydos=p;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
返回新的MyViewHolder(LayoutFlater.from(上下文)。充气(R.layout.item_does,viewGroup,false));
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder MyViewHolder,int i){
myViewHolder.titledoes.setText(mydos.get(i.getTitledoes());
myViewHolder.qualcsaalpostodiunimmagine.setText(mydos.get(i).getqualcsaalpostodiunimmagine());
myViewHolder.descdos.setText(mydos.get(i.getDescdoes());
}
@凌驾
public int getItemCount(){
返回myDoes.size();
}
类MyViewHolder扩展了RecyclerView.ViewHolder{
TextView标题DOES、DESCDO、qualcosaalpostodiunimmagine;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
titledoes=(TextView)itemView.findViewById(R.id.titledoes);
qualcosaalpostodiunimmagine=(TextView)itemView.findViewById(R.id.qualcosaalpostodiunimmagine);
descdoes=(TextView)itemView.findViewById(R.id.descdoes);
}
}
}
我还有其他类,但为了避免放置太多代码,它们不应该相关。在为
RecyclerView
设置LayoutManager
的同时创建一个空适配器:将其另存为类的字段:
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
doesAdapter = new DoesAdapter(MainActivity.this, list);
recyclerView.setAdapter(DoesAdapter);
当数据准备就绪时,填充适配器并通知:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
/// origin code here
for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
{
MyDoes p = dataSnapshot1.getValue(MyDoes.class);
list.add(p);
}
// reset data in adapter and not re-creating adapter:
doesAdapter.setItems(list);
doesAdapter.notifyDataSetChanged();
// instead of doesAdapter = new DoesAdapter(MainActivity.this, list);
recyclerView.setAdapter(DoesAdapter);
}
来源:和。。。你想避免什么错误?请原谅,如果这个问题有点混乱,不太准确,但是我在发布它时遇到了麻烦,因为有很多类似的问题(我已经看到了,但我没有帮助),不管怎样,我编辑了这个问题,现在出现了错误,再次抱歉!好的,首先谢谢你的回复。我想这些更改应该在MainActivity.java中完成,所以在我设置layoutmanager之后,我添加了您编写的三行,然后在ondatachange方法中添加了您编写的内容,如您所说删除了赋值行。但错误依然存在。也许我应该在管理新数据的课堂上做第二部分?但在那个类中,我没有引用recyclerview。。。因为recyclerview是MainActivity.java的一个字段,整个代码都放在主类中。是的,MainActivity是主类,所以我做对了。那么现在问题出在哪里?好的,问题也出在firebase上,有了你的解决方案和对数据库的一些更改,非常感谢!