2016-03-08 57 views
1

我已經在一個文件list.xml的ListView填充了相同的值多次

<LinearLayout> 

<Button 
    android:id="@+id/countryfilter" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:text="Load Country data"/> 


<Button 
    android:id="@+id/domain_filter" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:text="Load Domain data"/> 

    <ListView 
       android:id="@+id/listContents" 
       android:layout_width="wrap_content" 
       android:visibility="gone" 
       android:layout_height="wrap_content"> 
      </ListView> 
    </LinearLayout> 

繼得到了與列表視圖一個XML文件,我有row.xml內的代碼

<CheckedTextView 
     android:id="@+id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Some text here" 
     android:textSize="18sp" 
     android:gravity="center_vertical" 
     android:clickable="true" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:focusable="true" 
     android:checked="false" 
     android:onClick="toggle"/> 

在運行期間,listview將變得可見並且其數據將被設置。

這裏我設置onClickListener爲加載國家列表按鈕。 Countrylist項目已得到了一些國家

countryListBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      lv.setVisibility(View.VISIBLE); 
      initCountryList(); 

      customAdapter = new CustomAdapter(
        getApplicationContext(), R.layout.filters, android.R.id.text1, countryList 
      ); 
      lv.setAdapter(customAdapter); 
     } 
    }); 

這裏進出口設置onClickListener負載域列表按鈕的列表。的domainlist包含域

domainListBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      lv.setVisibility(View.VISIBLE); 
      initDomainList(); 
      domainAdapter = new CustomAdapter(getApplicationContext(), R.layout.filters, android.R.id.text1, domainList 
      ); 
      lv.setAdapter(domainAdapter); 
     } 
    }); 

的問題是,

列表視圖每次填充值被點擊按鈕時的列表。所以listview有相同的值被多次顯示。

+1

添加initDomainList();的代碼。看起來你正在添加元素,而不是空的。 – learner

+0

你不需要創建新的適配器,如果已經存在,看看這裏:http://stackoverflow.com/questions/2250770/how-to-refresh-android-listview – yshahak

+0

允許單擊按鈕一次布爾或調用initDomainList();只有一次 –

回答

1

之外,我建議你初始化和onCreate()上按一下按鈕,而初始化多次分配的適配器。由於模型是相同的,不需要創建兩個單獨的列表和適配器。

的onCreate()

// Initialize list and assign it to adapter 
dataList = new ArrayList<>(); 
adapter = new CustomAdapter(getApplicationContext(), R.layout.filters, android.R.id.text1, dataList 
      ); 
lv.setAdapter(adapter); 

而且即將按鈕點擊監聽器,只需清除列表,然後添加國家或域名列表,最後調用adatper.notifyDataSetChanged()

countryListBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      lv.setVisibility(View.VISIBLE); 
      // In this method, clear the list first then add the countries list 
      initCountryList(); 
      adapter.notifyDataSetChanged(); 
     } 
    }); 

    domainListBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      lv.setVisibility(View.VISIBLE); 
      // Same as countries list 
      initDomainList(); 
      adapter.notifyDataSetChanged(); 
     } 
    }); 

希望這會幫助你。

0

只是你調用此方法「initCountryList()」來的onclick聽衆