ListView 不显示在屏幕上
ListView doesn't display on screen
我最近开始在 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>
这是主要的 class "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",我希望它显示。
确保适配器具有方法 getItemcount()
并且它 returns classificacaoList.size()
。它不应该 return 0
;
嗯...这是一个非常明显的问题,在主布局 activity_atividade02
中 ListView
上方有一个 LinearLayout
,它的 layout_height
被设置为match_parent
并且它占据了整个布局并且不让 ListView
显示。
我在你写的时候测试你的代码,发现这里有一个错误,它工作正常,但我评论了 imageView 行,因为你没有在 Classificacao 中定义它 class
此处出错
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() )
与您在其他行中使用的一样
请在您的 ClassificacaOAdapter class 中添加 getCount() 方法,它是一个覆盖方法。它将 return 列表的大小,如果您不覆盖它,它将 return 0 作为您的列表大小。
public int getCount() {
return classificacaoList .size();
}
我最近开始在 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
<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>
这是主要的 class "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",我希望它显示。
确保适配器具有方法 getItemcount()
并且它 returns classificacaoList.size()
。它不应该 return 0
;
嗯...这是一个非常明显的问题,在主布局 activity_atividade02
中 ListView
上方有一个 LinearLayout
,它的 layout_height
被设置为match_parent
并且它占据了整个布局并且不让 ListView
显示。
我在你写的时候测试你的代码,发现这里有一个错误,它工作正常,但我评论了 imageView 行,因为你没有在 Classificacao 中定义它 class
此处出错
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() )
与您在其他行中使用的一样
请在您的 ClassificacaOAdapter class 中添加 getCount() 方法,它是一个覆盖方法。它将 return 列表的大小,如果您不覆盖它,它将 return 0 作为您的列表大小。
public int getCount() {
return classificacaoList .size();
}