[Android] ListView 에 업데이트 되었음을 알려주기 + Auto Scroll
1. 목적 : listview에 dynamic 하게 데이터를 추가/제거시, listview에서 이를 업데이트 할 수 있도록 한다.
2. 방법
2.1 변경사항을 업데이트하기 : 아래와 같이 listview에 연결된 adapter 객체의 notifyDataSetChanged() 함수를 호출하면 끝난다.
A. MessageAdapter class
public class MessageAdapter extends BaseAdapter { ... }B. Message 추가시 List View에 update 하도록 notifyDataSetChanged(); 를 호출한다.
public class MessageActivity extends Activity { MessageAdapter m_MsgAdapter=null; //... m_ListView = (ListView) findViewById(R.id.message_list_view); if( m_ListView != null) { m_ListView.setAdapter(m_MsgAdapter); } // adapter를 ListView에 설정 m_ListView.setAdapter(m_MsgAdapter); // list view에 item을 추가하기 위한 button Button btn = (Button) findViewById(R.id.btn_send); // button 에 OnClickListener btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // message is added ... // 아래 코드가 없으면, 버튼을 눌러도 ListView에 item에 추가 혹은 삭제되지 않는다. m_MsgAdapter.notifyDataSetChanged(); } }); //... }
2.2 List Auto Scroll (가장 최근에 추가된 view를 끝에 보여주기 ) : 아래와 같이 android:transcriptMode 를 추가하면 된다.
<LISTVIEW android:transcriptMode="alwaysScroll" android:layout_weight="1" android:layout_height="0dp" android:layout_width="match_parent" android:id="@+id/message_list_view" />
정말 쉽군.. :)