2010-10-24 81 views
0

我在刷新我的ListView時出現了一個奇怪的問題,它可以正常工作,直到設備旋轉,然後再次刷新時它會完全變爲空白。這隻能通過再次旋轉設備來固定(因爲它也在onCreate()中刷新),但是隻要再次刷新它就會變爲空白。問題一直存在,直到應用程序重新啓動。Android ListView刷新問題

編輯:

一些代碼:

private ListView contactlist = null; 
private static MatrixCursor matrixcursor = null; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    contactlist = (ListView) findViewById(R.id.contactlist); 
    if (savedInstanceState == null) { 
     matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"}); 
    } else { 
     contactlist.setAdapter(new listCursorAdapter(this,matrixcursor)); 
    } 
} 

能正常工作,但每當:

contactlist.setAdapter(new listCursorAdapter(this,matrixcursor)); 

onCreate()後調用和設備後已被旋轉的ListView一片空白。

+0

你能發表一些代碼嗎?否則,診斷問題確實很困難。 – elevine 2010-10-24 17:30:24

+0

已經發布了一些代碼。不想把所有東西都放在〜1000行,但是我想我得到了所有相關的東西 – ng93 2010-10-24 17:55:30

+0

您是否檢查了用於橫向視圖的佈局?也許有些事情不對。 – 2010-10-24 18:40:09

回答

1

嗯,我設法使contactlist靜態解決它:

private static ListView contactlist = null; 

我不知道爲什麼這個工作(只是做了幾個小時的試用/錯誤),所以如果任何人都可以解釋這將是偉大的。

1

我認爲你的MatrixCursor實際上是null。當您旋轉手機時,您知道該活動已被銷燬。所以savedinstanceState包可能不是null,但MatixCursor不會重新初始化。是的,它是靜態的,但我有一種感覺,如果它有一定的機會,它不會被加載到同一個類加載器中......靜態不會太可靠。

有一種這是最笨拙命名的方法:

onRetainNonConfigurationInstance()

我想這會幫助你解決這個情況。所以如果你返回你的MatrixCursor實例,你可以在稍後調用onCreate()使用getLastNonConfigurationInstance()來讀取數據。不保證被調用,所以你仍然需要處理沒有存儲狀態的情況。希望這有助於。

private ListView contactlist = null; 
private MatrixCursor matrixcursor = null; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    contactlist = (ListView) findViewById(R.id.contactlist); 
    matrixcursor = (MatrixCursor)getLastNonConfigurationInstance(); 
    if (matrixcursor == null) { 
     matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"}); 
    } else { 
     contactlist.setAdapter(new listCursorAdapter(this,matrixcursor)); 
    } 
} 

public MatrixCursor onRetainNonConfigurationInstance() { 
return matrixcuror; 
} 

public MatrixCuror getLastNonConfigurationInstance() { 
return (MatrixCursor) super.getLastNonConfigurationInstance(); 
} 
+0

謝謝,但它仍然無法正常工作。我也嘗試添加matrixcursor =(MatrixCursor)getLastNonConfigurationInstance(); before contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));每當它在onCreate()之後被調用但仍然有相同的問題 – ng93 2010-10-25 10:20:52