2013-09-26 168 views
0

我的listview有問題! 當我更改行值(在textview上)並執行列表的scoll時,我失去了值(並返回到我的第一個設置)! 例如,如果我使用text =「Example no.1」創建了50個textview的列表視圖,如果在滾動列表之後更改了值(onItemClick),則textview值爲「Example no.1」。Android listView滾動後丟失了數據

這是我的示例代碼:

............................................. 
String sItems = new String[50]; 
HashMap<String,Object> personMap=new HashMap<String, Object>(); 
............................................. 
sItems[iCnt] = "Example no.1"; 
personMap.put("title", sItems[iCnt]); 
data.add(personMap); 
............................................. 
String[] from={"title"}; 
int[] to={R.id.rowTextView}; 
final SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(),data,R.layout.all_textview,from,to); 
final ListView listView = (ListView) findViewById(R.id.cd_sel_title_listview_textview); 
listView.setAdapter((adapter)); 

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
    public void onItemClick(AdapterView<?> arg0, View v, int position, long id) 
    { 
    TextView textView = (TextView) v.findViewById(R.id.rowTextView); 
    textView.setText("Example No.2"); 
    } 
}); 
............................................. 

在哪裏我錯了嗎? 謝謝

回答

0

試試這個:

public void onItemClick(AdapterView<?> arg0, View v, int position, long id) 
{ 
TextView textView = (TextView) v.findViewById(R.id.rowTextView); 

textView.setText("Example No.2"); 
personMap=new HashMap<String, Object>(); 
personMap.put("title", "Example No.2"); 
data.set(position,personMap); 
} 
+0

有了這個修改,所有的工作都很好!謝謝!!! – rostonik

+0

@rostonik不客氣。也謝謝你,讓我爲我的項目考慮它 –

2

的事情是:在你的列表中的每個視圖將不會被保存在內存中,直到永遠。

適配器的觀點可以讓你有很長的名單,在內存中只保留一個你需要顯示,所以當您向下滾動並向後滾動時,視圖中值的更改位置會在其中以默認值進行釋放和重新創建。

您需要做的是創建一個自定義適配器(例如從ArrayAdapter擴展的類)並重新實現getView方法。

其中創建(或重新創建)每行視圖的方法。您可以在此處將文本重置爲適當的值。

的代碼是這樣:

public class ListAdapter extends ArrayAdapter<Item> { 

... 

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

    View v = convertView; 

    if (v == null) { 

     LayoutInflater vi; 
     vi = LayoutInflater.from(getContext()); 
     v = vi.inflate(R.layout.myview, null); 

    } 

    v.setText("anything you need"); 

    return v; 

} 

看一看CustomAdapter實現更多的信息。

+0

這是同樣的問題,當你上下滾動在ListView下來,只有一個列表項將繼續發生變化。只有那一件物品纔會但是,通過新會話對其進行測試可能會導致不同的項目總是發生更改。我從BaseAdapter創建了一個自定義適配器。我所有的數據都是靜態的,模擬數據。只是滾動導致問題 –

1

不是將值設置到TextView中,而是將值更改爲Array本身,然後調用adapter.notifyDataSetChanged()來通知適配器。

+1

比我的解決方案更簡單,@ rostonik你應該先嚐試它,如果它對你來說是足夠的;) – Guian

+0

@Paresh我在這裏有列表視圖的問題http://stackoverflow.com/questions/30850315/losing- images-from-networkimageview-after-scroll-list-up-down – Roon13