2015-08-03 95 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