Android 不更改ListView中的元素将冻结
我的ListView有问题。ListView的第一个元素是一个不变的视图。其他元素是在getView方法中自动创建的。问题是,第一个元素有时会冻结,其中的进度条不再转动。只有向下滚动然后再向上滚动到第一个元素时,才会发生这种情况。你知道我怎样才能解决那个问题吗 以下代码缩短,仅包含相关部分: ListView适配器:Android 不更改ListView中的元素将冻结,android,android-layout,android-listview,Android,Android Layout,Android Listview,我的ListView有问题。ListView的第一个元素是一个不变的视图。其他元素是在getView方法中自动创建的。问题是,第一个元素有时会冻结,其中的进度条不再转动。只有向下滚动然后再向上滚动到第一个元素时,才会发生这种情况。你知道我怎样才能解决那个问题吗 以下代码缩短,仅包含相关部分: ListView适配器: public class MyAdapter extends ArrayAdapter<String>{ private View main_control; pub
public class MyAdapter extends ArrayAdapter<String>{
private View main_control;
public PictureShowAdapter(Context context, ArrayList<String> URLs){
super(context, R.layout.picture_show_items, URLs);
LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
main_control = li.inflate(R.layout.main, null, false);
}
public View getView(final int position, View arg1, ViewGroup parent) {
if(position == 0){
return main_control;
} else{
//...create and return other items
}
}
公共类MyAdapter扩展了ArrayAdapter{
私有视图主控;
公共PictureShowAdapter(上下文、ArrayList URL){
超级(上下文、R.layout.picture\u show\u项目、URL);
LayoutInflater li=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
主控制=li.充气(R.layout.main,空,假);
}
公共视图getView(最终整数位置,视图arg1,视图组父视图){
如果(位置==0){
返回主控制;
}否则{
//…创建并返回其他项目
}
}
}
布局main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="#dddddd" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyleInverse"
android:layout_width="20dp"
android:layout_height="20dp"
android:visibility="gone" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:text=""
android:visibility="gone" />
</LinearLayout>
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:hint="@string/mainActivity_textView_Hint"
android:singleLine="true"
android:inputType="textUri"
android:imeOptions="actionGo"
android:text="" >
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onClickDownload"
android:text="@string/mainActivity_button" />
也许您应该使用ListView标题,而不是创建或修改适配器来处理此组件的更改(因为您想要的元素更改了列表中的第一个元素?) 我怀疑适配器中的逻辑导致了一些长时间运行的操作,从而导致了您的问题 总之,创建顶部单元格元素作为标题,而不是使用apapter
Linky:如果删除第一个元素的特殊处理,问题是否会消失?还有,为什么不使用“returnthis.main_control;”?什么是PictureShowActivity?PictureShowActivity.main\u控件具有什么值?我没看到它被初始化我很抱歉我把它缩短错了。我编辑了它以更正它。特殊处理意味着什么?您的
else
块重用视图是作为arg1
传递的还是进一步传递给super.getView
?否它总是膨胀一个新视图并返回它。我将在其余部分正常工作时实现ViewHolder模式。我还打算建议使用ViewHolder(但不想破坏答案)。这是一个必要的模式。谢谢你的回答。我尝试了你的解决方案,但问题仍然存在。那时你一定有什么东西阻塞了UI。你还有别的错误没有表现出来。我100%确信这是在列表顶部创建静态元素的正确解决方案。但是UI线程不能被阻止,因为ListView本身仍在正常滚动。对于这个特定的视图可能有不同的线程吗?