我正在尝试开发和Android应用程序,我已经为ListView构建了一个自定义适配器,用于在用户从分段组中选择不同选项时更改内容。
它最初工作,因此分段控件已更改且内容正确显示,但在第二次选择时,尽管所有数据都可用,但不会显示任何内容。
非常感谢有关如何正确更新适配器的任何建议
修改适配器和ListView数据的代码
SegmentedButtonGroup segmentedButtonGroup = (SegmentedButtonGroup)
findViewById(R.id.segmented_button_group);
segmentedButtonGroup.setOnClickedButtonPosition(new
SegmentedButtonGroup.OnClickedButtonPosition() {
@Override
public void onClickedButtonPosition(int position) {
Toast.makeText(listing_see.this, "Clicked: " + position,
Toast.LENGTH_SHORT).show();
// Need to make this update the list view on click
if(position == 0){
adapter.clear();
adapter = new CustomListAdapter(listing_see.this, titles1,
allThumbnails1, blurbs1);
adapter.notifyDataSetChanged();
list.setAdapter(adapter);
} else if (position == 1){
adapter.clear();
adapter = new CustomListAdapter(listing_see.this, titles2,
allThumbnails2, blurbs2);
adapter.notifyDataSetChanged();
list.setAdapter(adapter);
} else if (position == 2){
adapter.clear();
adapter = new CustomListAdapter(listing_see.this, titles3,
allThumbnails3, blurbs3);
adapter.notifyDataSetChanged();
list.setAdapter(adapter);
}
}
});
listingview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/icon"
android:layout_width="110dp"
android:layout_height="80dp"
android:padding="5dp" />
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:padding="2dp"
android:textColor="#33CC33" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_marginLeft="10dp"/>
</LinearLayout>
</LinearLayout>
CustomListAdapter
public class CustomListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final List<String> itemname;
private final List<String> imgid;
private final List<String> blurbs;
public CustomListAdapter(Activity context, List<String> itemname, List<String> imgid, List<String> blurbs) {
super(context, R.layout.listingview, itemname);
this.context=context;
this.itemname=itemname;
this.imgid=imgid;
this.blurbs=blurbs;
}
public View getView(int position,View view,ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.listingview, null,true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);
int imageID = getContext().getResources().getIdentifier(imgid.get(position), "drawable", context.getPackageName());
txtTitle.setText(itemname.get(position));
imageView.setImageResource(imageID);
extratxt.setText(blurbs.get(position));
return rowView;
};
}
模拟器的一些屏幕截图,用于显示正在发生的事情:
初始加载按预期显示,单击另一个选项卡第一次正确显示,然后选择另一个选项卡导致无法看到数据。
答案 0 :(得分:0)
更改
adapter.clear();
adapter = new CustomListAdapter(listing_see.this, titles1,
allThumbnails1, blurbs1);
adapter.notifyDataSetChanged();
list.setAdapter(adapter);
到
adapter.clear();
adapter.add(titles2, allThumbnails2, blurbs2);
adapter.notifyDataSetChanged();
这就是全部。您每次都在创建适配器的新对象,因此adapter.clear()
不执行任何操作。在创建适配器的新对象之后,该特定对象未附加到列表,但您正在调用notifyDataSetChanged
。
你应该这样做 1.清除适配器数据。
向适配器添加新数据。
NotifyDataSetChanged。 (不应使用new CustomListAdapter
个关键字。
希望这有帮助。