Android ListView中onClickListener和ArrayAdapter出现问题(影响多个视图的事件)
我正在将ArrayAdapter用于我的ListView:Android ListView中onClickListener和ArrayAdapter出现问题(影响多个视图的事件),android,listview,textview,adapter,onclicklistener,Android,Listview,Textview,Adapter,Onclicklistener,我正在将ArrayAdapter用于我的ListView: 我想要达到的目标: 我正在显示一个(无休止的滚动)列表视图,其中有很多图像和标题。标题只能有一行。经过修剪的标题(实际上比一行长)有一个onClickListener,它删除了显示整个标题的一行限制(setSingleLine(false),setEllipsize(null)) 我面临的问题:当我点击其中一个标题时,其他一些标题也可能受到影响。因此,当我单击标题并不断向下滚动时,我很可能会发现已经展开但尚未单击的标题。我假设这是由适
- 我想要达到的目标:
我正在显示一个(无休止的滚动)列表视图,其中有很多图像和标题。标题只能有一行。经过修剪的标题(实际上比一行长)有一个onClickListener,它删除了显示整个标题的一行限制(
)setSingleLine(false),setEllipsize(null)
- 我面临的问题:当我点击其中一个标题时,其他一些标题也可能受到影响。因此,当我单击标题并不断向下滚动时,我很可能会发现已经展开但尚未单击的标题。我假设这是由适配器的视图重用引起的,但我还没有研究整个概念,因为我刚刚开始在android环境中编程
- 守则:
<LinearLayout ... >
...
<com.app.views.CaptionView
android:id="@+id/caption" ... />
...
</LinearLayout>
这可能是视图膨胀的结果,所以最简单的解决方案是设置
setSingleLine( true ); setEllipsize( where );
在getView()方法中
但是,当视图从屏幕上滚动时,这将导致视图变为“未展开”。为了解决这个问题,我建议使用一种单独的数据结构,它可以保存一个布尔值,告诉您视图是否已展开。可能是hashMap或数组,具体取决于您在getView()中获得的有关视图的信息
public class CaptionView extends TextView
{
private boolean modified = false;
...
@Override
protected void onDraw( Canvas canvas )
{
super.onDraw( canvas );
if( !modified && getLineCount() > 1 )
{
modified = true;
setClickable( true );
setEllipsize( TruncateAt.END );
setSingleLine( true );
setOnClickListener( onClickListener );
}
}
private OnClickListener onClickListener = new OnClickListener()
{
public void onClick( View view )
{
TextView caption = (TextView) view;
if( caption.getLineCount() == 1 )
{
caption.setSingleLine( false );
caption.setEllipsize( null );
}
else
{
caption.setSingleLine( true );
caption.setEllipsize( TruncateAt.END );
}
}
};
}
setSingleLine( true ); setEllipsize( where );