listview.setAdapter (null) не работает - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть вкладка. Макет содержит представление списка, которое обновляется каждый раз при выборе вкладки. но новые элементы будут добавлены в список, и список не будет очищен перед добавлением новых элементов

public class DemoObjectFragment extends Fragment {
ListView lv;
private String TAG = DemoObjectFragment.class.getSimpleName();
public static ArrayList<HashMap<String, String>> contList = new ArrayList<>();
android.widget.ListAdapter adapter;

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View vw = inflater.inflate(R.layout.coin, container, false);
    try {
        for (int i = 0; i < contactList.size(); i++) {
            Log.v(TAG, "Response: " + contactList.get(i));
            if (Integer.valueOf(contactList.get(i).get("asset_id")) == MainActivity.typeCurrency) {
                contList.add(contactList.get(i));
            }
        }
    }catch (Exception e){
        e.getMessage();
    }


    lv=vw.findViewById(R.id.exchangeList);
    lv.setAdapter(null);
    adapter = new SimpleAdapter(getActivity(), contList, R.layout.list_item, new String[]{"sourceName", "priceCurrency"},
            new int[]{R.id.sourceName, R.id.priceCurrency});
    lv.setAdapter(adapter);
    contactList=new ArrayList<>();
    return vw;
}

}

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018
public class DemoObjectFragment extends Fragment {
ListView lv;
private String TAG = DemoObjectFragment.class.getSimpleName();
public static ArrayList<HashMap<String, String>> contList;
android.widget.ListAdapter adapter;

@Override
public View onCreateView(LayoutInflater inflater,
                     ViewGroup container, Bundle savedInstanceState) {
View vw = inflater.inflate(R.layout.coin, container, false);
try {
    contList = new ArrayList<>();
    for (int i = 0; i < contactList.size(); i++) {
        Log.v(TAG, "Response: " + contactList.get(i));
        if (Integer.valueOf(contactList.get(i).get("asset_id")) == MainActivity.typeCurrency) {
            contList.add(contactList.get(i));
        }
    }
}catch (Exception e){
    e.getMessage();
}


lv=vw.findViewById(R.id.exchangeList);
lv.setAdapter(null);
adapter = new SimpleAdapter(getActivity(), contList, R.layout.list_item, new String[]{"sourceName", "priceCurrency"},
        new int[]{R.id.sourceName, R.id.priceCurrency});
lv.setAdapter(adapter);
contactList=new ArrayList<>();
return vw;
   }
}

это будет нормально работать;)

0 голосов
/ 13 сентября 2018

Вам необходимо очистить элементы перед добавлением новых элементов в список,

 contList.clear();

Попробуйте добавить метод clear ().

 try {
    contList.clear();
    for (int i = 0; i < contactList.size(); i++) {
        Log.v(TAG, "Response: " + contactList.get(i));
        if (Integer.valueOf(contactList.get(i).get("asset_id")) == MainActivity.typeCurrency) {
            contList.add(contactList.get(i));
        }
    }
}catch (Exception e){
    e.getMessage();
}
...