自定义ListView仅在第一个操作时更新,第二个操作不显示任何内容

时间:2017-10-23 11:28:01

标签: java android listview refresh

我正在尝试开发和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;
    };
}

模拟器的一些屏幕截图,用于显示正在发生的事情: Screenshots of what is happening

初始加载按预期显示,单击另一个选项卡第一次正确显示,然后选择另一个选项卡导致无法看到数据。

1 个答案:

答案 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.清除适配器数据。

  1. 向适配器添加新数据。

  2. NotifyDataSetChanged。 (不应使用new CustomListAdapter个关键字。

  3. 希望这有帮助。