IM 클라이언트를 작성 중이며 파일 시스템 또는 네트워크에서 다운로드하고 ListView 맨 위에 새 요소를 표시해야합니다 (메시지 기록 - 오래된 메시지는 맨 위, 맨 아래). 내 자신의 어댑터에 대한 ListView 구현하지만 목록의 시작 부분에 새 요소를 추가하고 다시 그릴 수 없습니다. (NotifyDataSetChanged()는 ListView의 메시지 인덱스가 변경되고 android가 정상적으로 다시 그릴 수 없기 때문에 나에게 좋지 않습니다.)ListView 맨 위에 새 요소 추가
다른 앱과 비슷한 점이 있나요?
나는 그것을위한 특별한 코드를 생성하지 않는, 단순히 내 ListView에 새로운 어댑터를 만드는 오전 : MessagesListAdapter에서
messagesListView.setAdapter(new MessagesListAdapter(this));
을 그리고 재정의 getView() 및 getCount() 메소드 (현재 ArrayAdapter와 확장). ListView에 대한
내 XML은 다른 코드가 필요
<ListView
android:id="@+id/dialog_messages_list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_marginTop="@dimen/title_height">
</ListView>
그리고 하나 개의 요소 (하나의 메시지)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/dialogMessageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:background="@drawable/dialog_message_in"
/>
<TextView
android:id="@+id/dialogMessageDatetime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""/>
</LinearLayout>
될 수 있습니다 내 XML인가?
편집 : 나는
messagesListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList));
(new Thread() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
arrayList.add(0, "qwer");
}
}).start();
을 시도했다 그러나 그것은 또한 좋지 않은 것 같다. 스레드에서
((ArrayAdapter<String>)messagesListView.getAdapter()).notifyDataSetChanged();
에 전화를 걸려고했으나 예외가 발생했습니다.
관련 코드 및 오류 메시지를 게시하십시오. 이 작업을 수행하는 방법은 여러 가지 ** 있습니다 **. 나는 ListView 나 Adapter가 아닌 어떻게 역사가 정렬되는지에 초점을 맞출 것이다. – Sam
죄송합니다, @Sam, 나는 StackOverflow 의견에 정통합니다. 죄송합니다. 예를 들어 히스토리는 단순히 ArrayList입니다. 그러나 언젠가는 새로운 요소를 맨 앞에 추가하려고합니다. 그것은 단순한 것이라면 Deque 일 수 있습니다. 당신이 정확하게 질문하는 것을 이해합니까? –
좋아, ArrayList을 작성하여 ListView를 채우시겠습니까? –
Sam