2013-04-26 4 views
1

Я хочу добавить данные в список, нажав кнопку.ListView не получает обновления при вызове notifyDataSetChanged()

, но он не обновляется, нажимая кнопку, не знает, как она не работает. Пожалуйста, помогите мне.

здесь код ниже

@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> 

заранее спасибо

ответ

1

Не уверен, почему не обновляется. Код выглядит хорошо для меня. Вы можете попробовать очистить массив перед вызовом addAll(), потому что если вы не вы будете в конечном итоге с дубликатами в списке (который, вероятно, не то, что вы хотите, должны выглядеть следующим образом:.

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

Причина это ISN . «обновление т, вероятно, где-то еще, хотя разместить свое расположение, может быть, проблема там

EDIT:. Осмотрев расположение:.

Да, проблема в макете Вы не поставьте ListView внутри ScrollView. A ListView уже знает, как прокручивать. Избавьтесь от окружающих ScrollView, и вы должны быть хорошими.

+0

Я вставил код пользовательского интерфейса, чтобы предложить что-то по нему –

+0

Да, теперь я вижу проблему. Я отредактировал свой ответ. –

+0

это потрясающее спасибо за вечность .... –

0

Обратите внимание, что вы всегда добавить одни и те же элементы, вызвав

adapter.addAll(listItems); 

Несмотря на это,

Попробуйте отладки вам функцию GetView() в адаптере.

+0

OP не использует пользовательскую адаптер, он использует стандартный Android «ArrayAdapter». –

Смежные вопросы