ListView没有获得有关调用notifyDataSetChanged()的更新

时间:2013-04-26 13:49:51

标签: android android-listview android-arrayadapter

我想按下按钮时将数据添加到列表视图中。

但按钮没有得到更新不知道它是如何工作的。 请帮帮我。

这是下面的代码

@SuppressLint("NewApi")
public class Messanger extends Activity {
ArrayAdapter<String> adapter;
ListView output;
EditText box;
String msg[];
Button btn;
int counter=0;
ArrayList<String> listItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_messanger);
    output=(ListView)findViewById(R.id.textOutput);
    box=(EditText)findViewById(R.id.textInput);
    listItems = new ArrayList<String>();
         adapter = new ArrayAdapter<String>  (Messanger.this,android.R.layout.simple_list_item_1, android.R.id.text1, listItems);
    output.setAdapter(adapter);
    btn=(Button)findViewById(R.id.btnSend);
    btn.setOnClickListener(new OnClickListener()
    {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(Messanger.this, "in event", Toast.LENGTH_LONG).show();

            sendMessage(box.getText().toString());
            //stItems.notifyAll();


        }

    });
}
public void sendMessage(String message)
{
   listItems.add("me: "+message);
    adapter.addAll(listItems);
  adapter.notifyDataSetChanged();
}
}

我的布局看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ScrollView 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:layout_weight="10"  >
    <ListView 

        android:id="@+id/textOutput"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:paddingLeft="5dp" 
        android:paddingRight="5dp" 
        android:paddingTop="5dp" />
</ScrollView>

<LinearLayout 
    android:id="@+id/linearLayout1"
    android:orientation="horizontal" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:layout_weight="100"
    android:paddingLeft="5dp" 
    android:paddingRight="5dp"
    android:paddingBottom="5dp"
    android:baselineAligned="true">
    <EditText android:layout_weight="1" android:id="@+id/textInput"
        android:layout_height="45dp" android:layout_width="fill_parent">
        <requestFocus></requestFocus>
    </EditText>
    <Button android:layout_weight="1" android:text="Send"
        android:layout_height="45dp" android:layout_width="125dp"
        android:id="@+id/btnSend"></Button>
</LinearLayout>
</LinearLayout>

提前致谢

2 个答案:

答案 0 :(得分:1)

不确定为什么不更新。代码看起来不错。您可以在调用addAll()之前尝试清除数组,因为如果不这样做,您最终会在列表中找到重复项(这可能不是您想要的。应该如下所示:

listItems.add("me: "+message);
adapter.clear();
adapter.addAll(listItems);
adapter.notifyDataSetChanged();

它没有更新的原因可能在其他地方。发布你的布局,也许问题在那里。

编辑:看到布局后:

是的,问题在于您的布局。您没有在ListView内放置ScrollViewListView已经知道如何滚动。摆脱周围的ScrollView你应该很好。

答案 1 :(得分:0)

请注意,您始终通过调用

添加相同的项目
adapter.addAll(listItems);

无论如何,

尝试在适配器中调试getView()函数。