【问题标题】:I can't refresh my Listview我无法刷新我的列表视图
【发布时间】:2017-03-09 18:30:48
【问题描述】:

我有两个类,第一个用于 GUI,我在其中声明了我的列表视图和适配器,以及设置器,以便从我的第二个类中调用它们。

public class AndroidGUIModifier implements IMyComponentGUIModifier, IFragmentEvents {

    private transient ListView lv;
    List<String> mydeviceslist;
    ArrayAdapter<String> adapter ;

    public void setAdapter(ArrayAdapter<String> adapter) {
    this.adapter = adapter;
    adapter.notifyDataSetChanged();
}

    public void setMydeviceslist(List<String> mydeviceslist) {
    this.mydeviceslist = mydeviceslist;
}

@Override
public void onCreateView() {

        lv=(ListView) fragment.findViewById("xdevices") ;
        mydeviceslist  = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(fragment.getContext(),android.R.layout.simple_list_item_1,mydeviceslist);
       lv.setAdapter(adapter);

在我的第二堂课中,我将等待一个事件来接收我想在我的列表视图中加载它的列表,然后我将调用列表设置器来设置新接收到的列表并调用适配器设置器来更新它,但是它不起作用,尽管我在日志中收到了设备列表,但什么也没显示。

public class triprincipal extends BCModel {
    public List<String> mydevices ;
    BCEvent bcEvent;
    final ArrayAdapter<String> adapter =guiModifier.getAdapter();


    while (isRunning()) {
      bcEvent = waitForBCEvent();
        if (bcEvent.getID() == checkevent) {
            mydevices = bcCommandSenderPlugin.getDevicesNames(); // here I get a list of my devices
            Log.i("devices", mydevices.toString());
            guiModifier.getFragment().getActivity().runOnUiThread(new Runnable() {

                @Override
                public void run() {

                    guiModifier.setMydeviceslist(mydevices);
                    guiModifier.setAdapter(adapter);

                }
            }  );

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    setMydeviceslist() 中这样做:

    this.mydeviceslist.addAll(mydeviceslist);
    adapter.notifyDataSetChanged();
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      adapter.notifyDataSetChanged() 在这种情况下不起作用,因为您传递给适配器的引用值实际上并没有改变。 您需要创建一个新的Adapter 并将其设置为ListView 以使其工作。将您的 setAdapter() 更改为:

      public void setAdapter() {
          this.adapter = new ArrayAdapter<String>(fragment.getContext(), android.R.layout.simple_list_item_1, mydeviceslist);
          lv.setAdapter(adapter);
      }
      

      【讨论】:

      • 我确实像你说的那样,我在我的列表中添加了一些静态项目以在收到新列表之前对其进行测试,然后当我按下按钮接收新列表时,我的静态项目消失了,它不显示新收到的项目。
      【解决方案3】:

      尝试在相同的片段/活动中更新列表,并在更新后调用 notifyDataSetChanged() 两者在相同的活动/片段中......不要在列表上重复设置适配器......希望它有所帮助

      【讨论】:

        猜你喜欢
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多