如何在Android上用新的替换旧的列表适配器?它不断追加旧的

时间:2014-02-13 17:48:14

标签: java android android-listview android-arrayadapter listadapter

我调用一个函数createTheList来发送我的布局和数组适配器。然后在方法中我创建自定义setListAdapter。好吧,我想根据程序中的过滤器更改我的列表。即,如果一个人点击一个按钮,它会显示一个不同的列表。所以,我想再次调用createTheList方法,并在替换旧列表时重新创建列表。我正在努力解决这个问题。如果我使用不同的适配器再次调用createTheList,它只会附加到旧列表。有人可以带我走过这个吗?

public void createTheList(final int num, String[] Array ){


      setListAdapter(new ArrayAdapter<String>(getActivity(), layoutName, R.id.myText, Array){         

        @Override

        public View getView(int position, View convertView, ViewGroup parent){



           final View row = super.getView(position, convertView, parent);
           Button commentButton = (Button) row.findViewById(R.id.button1);
           Button missingButton = (Button) row.findViewById(R.id.button2);
           Button rideAlongButton = (Button) row.findViewById(R.id.button3);


            if (arrayOfShifts[position].getRideAlongCount()>0 && arrayOfShifts[position].positionOnList == position){
                rideAlongButton.setVisibility(row.VISIBLE);
            }
            else{
                rideAlongButton.setVisibility(row.GONE);
            }

            if (arrayOfShifts[position].getMissingCnt() > 0 && arrayOfShifts[position].positionOnList == position){
                missingButton.setVisibility(row.VISIBLE);
            }
            else{
                missingButton.setVisibility(row.GONE);
            }

            if (arrayOfShifts[position].getHasComment() > 0 && arrayOfShifts[position].positionOnList == position){
                commentButton.setVisibility(row.VISIBLE);
            }
            else{
                commentButton.setVisibility(row.GONE);
            }


            return row;

        }
     });

从以下位置调用createTheList:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    layoutName = R.layout.fragtest1;
    //My values to call a function
    cache.put("Value1", "02-12-2014");
    cache.put("Value2", 1);

    //getShifts method returns an array.
    String[] adapterArray = getShifts("GetShifts3" , cache);

    createTheList(layoutName, adapterArray);

    //If I add the following code, which is just a sample to replace my old list
    //instead of removing the old list, it appends to the old list.

    cache.clear();
    //New Data
    cache.put("Value1", "02-12-2014");
    cache.put("Value2", 2);

    String[] adapterArray2= getShifts("GetShifts3" , cache);

    createTheList(layoutName, adapterArray2);
}

3 个答案:

答案 0 :(得分:0)

notifyDataSetCHanged没有帮助?

答案 1 :(得分:0)

您是否考虑过使用List对象的RemoveAll()或Clear()方法。

答案 2 :(得分:0)

尝试在调用另一个列表之前清除String数组变量“Array”。