当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法可以防止跳过RecyclerView的布局?

吉凯捷
2023-03-14
@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);
        }
    }
}

共有1个答案

程和畅
2023-03-14

在为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); 
}

来源:https://stackoverflow.com/A/58251986/12596713

 类似资料:
  • 我试图在我的应用程序中使用视图寻呼机实现照片查看器。我能够让系统用户界面消失(导航和状态栏)在一个单一的触摸。我遇到的唯一问题是,每次我使状态栏消失并重新出现时,我在视图寻呼机上的布局开始抖动或跳跃。 我的实现的可视化 我想要实现的是什么 我已经试着按照这个stack over flow post中的建议设置系统ui标志。但它仍然给了我“神经质”的布局反应。 下面的代码是我用来隐藏/显示状态栏的:

  • 问题内容: 文档说调用sys.exit()会引发SystemExit异常,该异常可以在外部级别捕获。在这种情况下,我想确定无疑地从测试用例中退出,但是unittest模块会捕获SystemExit并阻止退出。这通常很好,但是我要处理的特定情况是我们的测试框架检测到已配置为指向非测试数据库的情况。在这种情况下,我要退出并阻止运行任何进一步的测试。当然,由于unittest捕获了SystemExit并

  • 问题内容: 我有一个现有的JPA(EclipseLink)项目,其中所需的行为是,如果在实体的字段中给出空值,则不应保留该空值。 用例是我们可能会从外部来源对这些实体进行一些部分更新。这些来源可能会给我们一个空值,这并不意味着“使该字段无效”,而是“我没有这个值”。 是否有注释,模式或其他工具可用于在setter中自动执行空检查,或告诉JPA不要保留空值??? 我可以检查每个实体中的每个设置器,然

  • 在Spock规范中,expect:或then:block中的任何行都被计算并断言为,除非它具有返回类型为的签名。 方法在类中定义如下: 我故意在那里断言,这样它就不会失败。即使失败并出现错误: 如何以及为什么方法调用结果被计算为?

  • 我想从火力点实时数据库显示图片。(带有加密图像(字符串))类似加密图像是“照片” 函数loadPhoto() 问题出在哪里?我连接adapter和recyclerview,并设置GridManager。