未为 Android ListView 调用适配器的 class getView() 函数
Adapter's class getView() function not called for Android ListView
我正在尝试创建一个包含项目列表的 ListView,每个项目都包含三个组件。
- 标题 (SezonNo)
- 描述
- 图像 (SezonThumb)
以下是布局文件的代码 "layout_album",列表中的每个项目将如何显示:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activities.SeasonsActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/imgThumbnail"
android:clickable="true"
/>
<TextView
style="@style/style_textviewsProfile"
android:layout_margin="0dp"
android:textStyle="bold"
android:id="@+id/textViewSeasonNo"
android:text="Season No: " />
<TextView
android:id="@+id/textViewDescription"
style="@style/style_textviewsProfile"
android:text="Description: " />
<View
android:layout_width="match_parent"
android:layout_height="4dp"
android:background="@color/Gray"></View>
</LinearLayout>
</ScrollView>
下面是Activity的代码:
public void onCreate(){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seasons);
listView_seasons=findViewById(R.id.list_seasons);
txtTitle = findViewById(R.id.txtTitle);
String[] seasonNos=new String[]{"1","2","3","4","5"};
String[] seasonDescriptions=new String[]{"a","b","c","d","e"};
int[] seasonThumbs= new int[]{R.drawable.sezon1, R.drawable.sezon2, R.drawable.flag, R.drawable.flag, R.drawable.flag};
adapter=new ListAdapter(this,seasonNos,seasonDescriptions,seasonThumbs);
listView_seasons.setAdapter(adapter);
}
//____________________________Adapter Class________________________//
public class ListAdapter extends ArrayAdapter<String> {
Context context;
String sezonNo[];
String desc[];
int[] imgs;
public ListAdapter(@NonNull Context context, String[] sezonNo, String[] desc, int[] imgs) {
super(context,R.layout.layout_album,R.id.textViewSeasonNo,sezonNo);
this.context=context;
this.sezonNo = sezonNo;
this.desc = desc;
this.imgs = imgs;
Log.d("List","Adapter");
}
@Override
public int getCount() {
return 0;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
Log.d("List","setting bindings...");
view=getLayoutInflater().inflate(R.layout.layout_album,null);
TextView txtSezonNo=view.findViewById(R.id.textViewSeasonNo);
TextView txtDescription=view.findViewById(R.id.textViewDescription);
ImageView imgThumbnail=view.findViewById(R.id.imgThumbnail);
progressDialog.hide();
txtSezonNo.setText(seasonNos[position]);
txtDescription.setText(seasonDescriptions[position]);
imgThumbnail.setImageResource(seasonThumbs[position]);
return view;
}
}
正在调用适配器 class 的构造函数,但 getView()
根本没有被调用。
您的 getView()
未被调用,因为您 return 在 getCount()
中输入的大小为 0
请在您的 getCount()
中输入:
@Override
public int getCount() {
return sezonNo.length;
}
也 getItemId
不应该是所有的 0
,简单的解决方案可以是列表中项目的 return 位置。 return position
喜欢
@Override
public long getItemId(int position) {
return position;
}
我正在尝试创建一个包含项目列表的 ListView,每个项目都包含三个组件。
- 标题 (SezonNo)
- 描述
- 图像 (SezonThumb)
以下是布局文件的代码 "layout_album",列表中的每个项目将如何显示:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activities.SeasonsActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/imgThumbnail"
android:clickable="true"
/>
<TextView
style="@style/style_textviewsProfile"
android:layout_margin="0dp"
android:textStyle="bold"
android:id="@+id/textViewSeasonNo"
android:text="Season No: " />
<TextView
android:id="@+id/textViewDescription"
style="@style/style_textviewsProfile"
android:text="Description: " />
<View
android:layout_width="match_parent"
android:layout_height="4dp"
android:background="@color/Gray"></View>
</LinearLayout>
</ScrollView>
下面是Activity的代码:
public void onCreate(){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seasons);
listView_seasons=findViewById(R.id.list_seasons);
txtTitle = findViewById(R.id.txtTitle);
String[] seasonNos=new String[]{"1","2","3","4","5"};
String[] seasonDescriptions=new String[]{"a","b","c","d","e"};
int[] seasonThumbs= new int[]{R.drawable.sezon1, R.drawable.sezon2, R.drawable.flag, R.drawable.flag, R.drawable.flag};
adapter=new ListAdapter(this,seasonNos,seasonDescriptions,seasonThumbs);
listView_seasons.setAdapter(adapter);
}
//____________________________Adapter Class________________________//
public class ListAdapter extends ArrayAdapter<String> {
Context context;
String sezonNo[];
String desc[];
int[] imgs;
public ListAdapter(@NonNull Context context, String[] sezonNo, String[] desc, int[] imgs) {
super(context,R.layout.layout_album,R.id.textViewSeasonNo,sezonNo);
this.context=context;
this.sezonNo = sezonNo;
this.desc = desc;
this.imgs = imgs;
Log.d("List","Adapter");
}
@Override
public int getCount() {
return 0;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
Log.d("List","setting bindings...");
view=getLayoutInflater().inflate(R.layout.layout_album,null);
TextView txtSezonNo=view.findViewById(R.id.textViewSeasonNo);
TextView txtDescription=view.findViewById(R.id.textViewDescription);
ImageView imgThumbnail=view.findViewById(R.id.imgThumbnail);
progressDialog.hide();
txtSezonNo.setText(seasonNos[position]);
txtDescription.setText(seasonDescriptions[position]);
imgThumbnail.setImageResource(seasonThumbs[position]);
return view;
}
}
正在调用适配器 class 的构造函数,但 getView()
根本没有被调用。
您的 getView()
未被调用,因为您 return 在 getCount()
中输入的大小为 0
请在您的 getCount()
中输入:
@Override
public int getCount() {
return sezonNo.length;
}
也 getItemId
不应该是所有的 0
,简单的解决方案可以是列表中项目的 return 位置。 return position
喜欢
@Override
public long getItemId(int position) {
return position;
}