上个星期我遇到困扰我的问题。我有一个与ArrayAdapter连接的listView
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chkSendMe=(CheckBox)findViewById(R.id.chkSendMe);
lv = (ListView) findViewById(R.id.outputList);
res = getResources();
SelectedUsersAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
lv.setAdapter(SelectedUsersAdapter);
}
这是活动xml文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<RelativeLayout
android:id="@+id/TopLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:paddingBottom="4dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<Button
android:id="@+id/btnSelectUsers"
style="?android:attr/buttonStyleSmall"
android:layout_width="95dp"
android:layout_height="wrap_content"
android:onClick="ShowSelection"
android:text="@string/select_recipients" />
<CheckBox
android:id="@+id/chkSendMe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/btnSelectUsers"
android:onClick="onSendMeClick"
android:text="@string/send_myself"
android:textSize="13sp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/ListLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="2dp" >
<ListView
android:id="@+id/outputList"
android:layout_width="match_parent"
android:layout_height="110dp"
android:textSize="12sp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/MessageLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:paddingBottom="1dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="1dp" >
<TextView
android:id="@+id/lblMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="17dp"
android:text="@string/w_message" />
<EditText
android:id="@+id/txtMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/btnEmoticon"
android:ems="10"
android:height="70dp"
android:inputType="textMultiLine"
android:maxHeight="100dp"
android:scrollbars="vertical"
android:textSize="12sp" >
<requestFocus />
</EditText>
<ImageButton
android:id="@+id/btnEmoticon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignRight="@+id/txtMessage"
android:layout_alignTop="@+id/lblMessage"
android:layout_marginRight="16dp"
android:background="@android:color/transparent"
android:contentDescription="@string/emoticonButton"
android:cropToPadding="false"
android:onClick="OnbtnEmoticonsClick"
android:src="@drawable/emoticons01" />
<ImageButton
android:id="@+id/btnImportDoc"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentTop="true"
android:layout_marginRight="24dp"
android:layout_toLeftOf="@+id/btnEmoticon"
android:background="@android:color/transparent"
android:contentDescription="@string/import_doc_button"
android:cropToPadding="false"
android:onClick="onbtnImportDocClick"
android:src="@drawable/attach_icon" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/BottomLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.41"
android:focusable="true"
android:focusableInTouchMode="true"
android:paddingBottom="0dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" >
<Button
android:id="@+id/btnSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/btnServiceHandle"
android:layout_alignParentTop="true"
android:minHeight="35dp"
android:onClick="onSendClick"
android:text="@string/send"
android:textSize="13sp" />
<ToggleButton
android:id="@+id/btnServiceHandle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:minHeight="50dp"
android:onClick="onServiceToggleClicked"
android:text="@string/service_handle"
android:textOff="@string/service_handle_off"
android:textOn="@string/service_handle_on"
android:textSize="12sp" />
</RelativeLayout>
</LinearLayout>
问题是当我更改ArrayAdapter的内容时,listView不会反映更改。
以下是更改ArrayAdapter
的click事件的代码public void onSendMeClick(View view)
{
if(chkSendMe.isChecked())
{
SelectedUsersAdapter.clear();
SelectedUsersAdapter.add("test String");
SelectedUsersAdapter.notifyDataSetChanged();
}
else
{
SelectedUsersAdapter.clear();
SelectedUsersAdapter.notifyDataSetChanged();
}
这一切都始于我更新到Android sdk工具23.0.2并构建工具20.在以前的sdk工具中没有问题(22.6)。 为了使事情变得更糟,有时(很少)问题消失(列表正确地改变其内容)。 但是,如果我触摸editText字段并出现虚拟键盘,那么当我关闭键盘时,列表会反映ArrayAdapter中的每个更改。那我永远没有问题。 我试图使一切无效。没有。问题出在那里。我还更改了整个xml文件并将所有内容放在RelativeLayout下。没有了。当然,没有任何错误表现出来。 我的代码出了什么问题?
的解决方案的。我发现了这个问题。我在这里写它是为了万一有人遇到这样的事情。我在MainActivity函数中使用了一个静态的引用,而所做的只是在主视图的textview中写一段文本。但我注意到该服务正在调用主视图的view.RequestLayout。所以我认为这就像服务控制主视图一样。当我将其更改为从UI线程运行时,一切正常。 谢谢大家。
答案 0 :(得分:0)
在为列表视图设置适配器之前,您是否尝试过SelectedUsersAdapter.setNotifyOnDataChanged(true);
。这是我一直使用的,从来没有遇到任何问题。
ArrayAdapter.setNotifyOnChange(boolean)
编辑: notifyDataSetChanged()仅通知ListView数据已更改,而不是重绘自身。在您更改数据后尝试添加refreshDrawableState。