【问题标题】:ListView doesn't display on screenListView 不显示在屏幕上
【发布时间】:2019-05-08 18:22:10
【问题描述】:

我最近开始在 Android 应用程序上使用ListView,但我没有让它显示在屏幕上。

我看了很多关于如何自定义Adapter 的教程并逐行进行,但最后我无法在我的屏幕上显示ListView,我什至放了一个固定的文本一个TextView 显示在ListView 但它仍然没有显示它。

这是我的实体代码的构造函数:

 public Classificacao(int colocacao, int time, int pontos) {
        this.colocacao = colocacao;
        this.time = time;
        this.pontos = pontos;
    }

这是我的扩展“ArrayAdapter”的自定义适配器

private Context context;
private ArrayList<Classificacao> classificacaoList;

ClassificacaoAdapter(Context context, ArrayList<Classificacao>         classificacaoList) {
    super(context, R.layout.layout_classificacao, classificacaoList);
    this.context = context;
    this.classificacaoList = classificacaoList;
}

@SuppressLint("SetTextI18n")
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if(convertView == null){
        convertView = layoutInflater.inflate(R.layout.layout_classificacao, parent, false);
    }

    TextView colocacao = convertView.findViewById(R.id.texto1);
    colocacao.setText(Integer.toString(classificacaoList.get(position).getColocacao()));

    ImageView imagem = convertView.findViewById(R.id.imagem1);
    imagem.setImageResource(classificacaoList.get(position).getImagem());

    TextView nome = convertView.findViewById(R.id.texto2);
    nome.setText(classificacaoList.get(position).getTime());

    TextView pontos = convertView.findViewById(R.id.texto3);
    pontos.setText(Integer.toString(classificacaoList.get(position).getPontos()));

    return convertView;
}

这是具有ListView 的布局“activity_atividade02”,以及其他一些我不会在此处显示的文本视图。

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

这是由adapter填充的布局“layout_classificacao”

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="20dp">

    <TextView
        android:id="@+id/texto1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center"
        android:textColor="@android:color/black"
        android:textSize="30sp" />

    <ImageView
        android:id="@+id/imagem1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:contentDescription="imagem do time"
        app:srcCompat="@drawable/flamengo" />

    <TextView
        android:id="@+id/texto2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:textColor="@color/colorPrimary"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/texto3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center"
        android:textColor="@android:color/black"
        android:textSize="30sp" />
</LinearLayout>

这是主类“Atividade02” 一切的开始

public class Atividade02 extends AppCompatActivity {

    ListView listView;

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

        listView = findViewById(R.id.listView);

        ArrayList<Classificacao> classificacaoArrayList = new ArrayList<>();

        classificacaoArrayList.add(new Classificacao(1, 2,46));
        classificacaoArrayList.add(new Classificacao(2, 1,42));
        classificacaoArrayList.add(new Classificacao(3,0,38));
        classificacaoArrayList.add(new Classificacao(4,3,35));
        classificacaoArrayList.add(new Classificacao(5,5,33));
        classificacaoArrayList.add(new Classificacao(6,4,33));

        ArrayAdapter classificacaoAdapter = new ClassificacaoAdapter(this, classificacaoArrayList);

        listView.setAdapter(classificacaoAdapter);

    }
}

继续,ListView 没有显示“ClassificacaoAdapter”,我希望它这样做。

【问题讨论】:

    标签: java android listview adapter android-arrayadapter


    【解决方案1】:

    确保适配器具有getItemcount() 方法并返回classificacaoList.size()。不应该是return 0;

    【讨论】:

      【解决方案2】:

      嗯...这是一个非常明显的问题,在主布局中 activity_atividade02ListView 上方有一个 LinearLayout ,它的 layout_height 被设置为 match_parent 并且它占据了整个布局并且不让 ListView 显示出来。

      【讨论】:

        【解决方案3】:

        我在您编写代码时测试了您的代码,并在此处发现了一个错误,它可以正常工作,但我评论了 imageView 行,因为您没有在 Classificacao 类中定义它

        这里有错误

        TextView nome = convertView.findViewById(R.id.texto2);
        nome.setText(classificacaoList.get(position).getTime());
        

        setText() 只接受字符串..但是你可以传递整数而不是字符串

        nome.setText(""+classificacaoList.get(position).getTimee());
        

        或使用

        Integer.toString( classificacaoList.get(position).getTimee() )
        

        就像你在其他行中使用的那样

        【讨论】:

          【解决方案4】:

          请在 ClassificacaoAdapter 类中添加 getCount() 方法,它是一种覆盖方法。它将返回列表的大小,如果您不覆盖它,它将返回 0 作为您的列表大小。

          public int getCount() {
                  return classificacaoList .size();
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-25
            • 2021-03-15
            • 1970-01-01
            • 2020-01-08
            • 1970-01-01
            • 2023-03-22
            • 1970-01-01
            • 2023-03-05
            相关资源
            最近更新 更多