【问题标题】:How can i stop Listview repeating the titles?如何停止 Listview 重复标题?
【发布时间】:2020-09-14 22:51:26
【问题描述】:

您好,我是编码新手,我正在创建一个应用程序,需要你们的帮助!

当我有数据要显示时,我的表格视图的第一行总是重复。

这是我的应用程序的输出:

我希望它像这样的普通桌子:

我要给你看我的代码:

我的“主要活动”:

public class Administracao extends AppCompatActivity {


    private static final String[] MATRICULA = new String[]{
            "10-NX-68", "21-30-XJ", "54-HI-11", "90-29-VE"
    };

    private AutoCompleteTextView editText_Matric;

    //Referencias base de dados
    DatabaseReference reff2;

    private FirebaseDatabase database;

    Spinner spinner;

     String selected_item;



     //Testes Firebase listview apagar se der erro


    List<Dados_Administracao> administracao_adapter;
    ListView listViewCondutores;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_administracao);

        editText_Matric = findViewById(R.id.actv);
        Button btn = findViewById(R.id.btn_seguinte);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, MATRICULA);
        editText_Matric.setAdapter(adapter);

        //TESTES FIREBASE list view
        listViewCondutores = (ListView) findViewById(R.id.listView1);

        administracao_adapter = new ArrayList<>();


        editText_Matric.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                //Mostrar todos os registos

                reff2 = database.getInstance().getReference().child("Registo Inicial e Final");

                reff2.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange( DataSnapshot dataSnapshot) {

                        administracao_adapter.clear();


                        for (DataSnapshot ds : dataSnapshot.getChildren()) {

                             Dados_Administracao dt = ds.getValue(Dados_Administracao.class);


                            if(ds.child("matricula").getValue().equals(editText_Matric.getText().toString())) {

                                administracao_adapter.add(dt);

                            }


                          }

                        Administracao_adapter adapter2 = new Administracao_adapter(Administracao.this, administracao_adapter);

                        listViewCondutores.setAdapter(adapter2);

                      //  adapter2.notifyDataSetChanged();



                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        // Handle possible errors.
                        Log.e("The read failed: " ,databaseError.getMessage());
                    }
                });

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }


        });

    }

我存储数据的活动:

 public class Dados_Administracao {

       private String observacoes,matricula,datainicio,horainicio,datafim,horafim,nomecondutor,marca,codprojeto,latfinal,longfinal,obsfinal,latitude,longitude,kminicial,kmfinal;


        public Dados_Administracao(){

        }

        public Dados_Administracao(String observacoes, String matricula, String datainicio, String horainicio, String datafim, String horafim, String nomecondutor, String marca, String codprojeto, String latfinal, String longfinal, String obsfinal, String latitude, String longitude, String kminicial, String kmfinal) {
            this.observacoes = observacoes;
            this.matricula = matricula;
            this.datainicio = datainicio;
            this.horainicio = horainicio;
            this.datafim = datafim;
            this.horafim = horafim;
            this.nomecondutor = nomecondutor;
            this.marca = marca;
            this.codprojeto = codprojeto;
            this.latfinal = latfinal;
            this.longfinal = longfinal;
            this.obsfinal = obsfinal;
            this.latitude = latitude;
            this.longitude = longitude;
            this.kminicial = kminicial;
            this.kmfinal = kmfinal;
        }

        public String getObservacoes() {
            return observacoes;
        }

        public String getMatricula() {
            return matricula;
        }

        public String getDatainicio() {
            return datainicio;
        }

        public String getHorainicio() {
            return horainicio;
        }

        public String getDatafim() {
            return datafim;
        }

        public String getHorafim() {
            return horafim;
        }

        public String getNomecondutor() {
            return nomecondutor;
        }

        public String getMarca() {
            return marca;
        }

        public String getCodprojeto() {
            return codprojeto;
        }

        public String getLatfinal() {
            return latfinal;
        }

        public String getLongfinal() {
            return longfinal;
        }

        public String getObsfinal() {
            return obsfinal;
        }

        public String getLatitude() {
            return latitude;
        }

        public String getLongitude() {
            return longitude;
        }

        public String getKminicial() {
            return kminicial;
        }

        public String getKmfinal() {
            return kmfinal;
        }
    }

【问题讨论】:

  • 您应该调试应用程序并了解adapteradapter2administracao_adapter 中的内容。如果你得到了你期望的结果,那么在设置适配器或刷新ListView 时可能会出现问题。我通常使用ViewHolders。在Dados_Administracao dados = adminnistracao_Adapter.get(position); 你得到数据,看看里面有什么。
  • 您的Adapter_view_layout 应该只包含您希望在每一行中出现的内容。标头应该单独处理——例如,通过直接向ListView 添加一个标头,或者只是在Adapter 中手动处理它——所以它基本上应该只是一行TextViews。
  • 谢谢伙计,我做到了,迈克,效果很好;))。只有一个问题,你知道我怎样才能让滚动视图同时工作吗??

标签: android android-studio listview


【解决方案1】:

如果您打算使用ListView,那么它直接支持将标题添加到您的列表中,请查看addHeaderView(View v)

因此,在这种情况下,您要做的是将标题部分从行布局中分离到一个新的布局文件中,对其进行扩充并调用 listViewCondutores.addHeaderView(inflatedView)

但是,RecyclerView 可能更适合您的需求,通常建议使用 ListView。那么即使这不直接支持标题视图,它也支持多种视图类型!

【讨论】:

  • 您好,谢谢您的帮助。你知道如何让表格的所有行同时滚动吗?谢谢
  • 抱歉,我不太确定我是否理解您的问题,如果不是同时滚动,它们现在是如何滚动的?
  • 我制作了一个有问题的视频,你可以看这里:
  • 虽然不是一个理想的解决方案,但我建议您将 ListView/RecyclerView 包装在 HorizontalScrollView 中,而不是在适配器行布局中包含任何滚动视图!
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2010-12-22
  • 2017-01-11
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
相关资源
最近更新 更多