2015-08-03 89 views
0

當我點擊ListView中的每一行時,我希望行內的TextView變成粗體,並且工作完美,但是我面臨的問題是,當我點擊在我的ListView中的另一個項目上,另一個行項目仍然是粗體以及剛剛選擇的項目當試圖突出顯示ListView行項onClick時出現問題

如何將最後選定的ListView行TextView的字體選擇回另一個NORMAL後?謝謝。

這裏是我的代碼:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    super.onListItemClick(l, v, position, id); 



    TextView name = (TextView) v.findViewById(R.id.songTextView); 
    TextView artist = (TextView) v.findViewById(R.id.artistTextView); 


     name.setTypeface(null, Typeface.BOLD); 
     artist.setTypeface(null, Typeface.BOLD); 


} 
+1

嘗試使名稱和藝術家textviews全球和名稱初始化之前=(TextView)v.findViewById(Ri d.songTextView);檢查是否爲空然後初始化否則使字體。正常,然後初始化 –

+0

嘗試使用選擇器可能是您的問題得到解決。 –

+0

您使用適配器來顯示Listview數據嗎? – Meenaxi

回答

4

一個簡單的方法來實現,這是一個成員添加到adaper與粗體行的位置,以-1初始化它。 在您的onItemClickListener調用適配器並將字段設置爲按下的位置,然後調用notifiyDataSetChanged。在你的適配器getview檢查當前位置是否爲粗體或由適配器中的bold_position字段。

一些代碼:

adaper:

public class CustomAdapter extends ...{ 

int mBoldPos = -1; 
public void setBoldPos(int newPos) 
{ 
this.mBoldPos = newPos; 
} 

片段 -

mListView.setOnItemClickListener(new ....) 
{ 
    onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 
    ((CustomAdapter) mListView.getAdapter()).setBoldPos(position); 
    ((CustomAdapter) mListView.getAdapter()).notifiyDataSetChanged(); 
    } 
} 

適配器:

getView(..) 
{ 
if (pos == mBoldPos) 
    { 
    // Bold me up 
    } 
} 
+0

當你說「使用加粗行的位置向adaper添加成員時,用-1初始化它」。我應該創建一個名爲「mBoldPos」的方法來返回一個int嗎?以及如何用-1初始化它?謝謝。 – Jack

+0

結帳我的編輯 – EE66