2017-12-18 8 views
-1
public class ChatBubbleActivity extends AppCompatActivity { 
private static final String TAG = "ChatActivity"; 
Toolbar toolbar; 
TextView tv_name; 
List<ListData> dataList; 
int user_id; 
int msg_type = 1; 
DatabaseHelper databaseHelper; 
private ListView listView; 
private EditText chatText; 
private ImageButton buttonSend; 
private String name, message, time; 
private ChatArrayAdapter chatArrayAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chat); 
    name = getIntent().getStringExtra("name"); 
    user_id = getIntent().getIntExtra("user_id", 0); 
    databaseHelper = new DatabaseHelper(this); 

    toolbar = findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_back); 
    toolbar.setTitleTextColor(getResources().getColor(R.color.white)); 
    toolbar.setSubtitleTextColor(getResources().getColor(R.color.white)); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    receiveMessage(); 
    tv_name = findViewById(R.id.tv_name); 
    buttonSend = findViewById(R.id.buttonSend); 
    listView = findViewById(R.id.listView1); 
    chatText = findViewById(R.id.chatText); 
    listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
    listView.setAdapter(chatArrayAdapter); 
    chatArrayAdapter.registerDataSetObserver(new DataSetObserver() { 
     @Override 
     public void onChanged() { 
      super.onChanged(); 
      listView.setSelection(chatArrayAdapter.getCount() - 1); 
     } 
    }); 
    tv_name.setText(name); 
} 

private void receiveMessage() { 
    dataList = new ArrayList<>(); 
    dataList = databaseHelper.getSingleUserMsg(user_id); 
    for (int i = 0; i < dataList.size(); i++) { 
     ListData listData=dataList.get(i); 
     message = listData.getMessage(); 
     time = listData.getCreated_at(); 
     msg_type = listData.getMsg_type(); 
     Log.d("Message",message); 
     Date dateTime = null; 
     try { 
      dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a").parse(time); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(dateTime); 
     DateFormat timeFormatter = new SimpleDateFormat("h:mm a"); 
     int layout_resource; 
     if (dataList.get(i).getMsg_type() == 0) { 
      layout_resource = R.layout.item_chat_left; 
     } else { 
      layout_resource = R.layout.item_chat_right; 
     } 
     chatArrayAdapter = new ChatArrayAdapter(getApplicationContext(), layout_resource, dataList, msg_type); 
     chatArrayAdapter.add(new ChatMessage(message, timeFormatter.format(dateTime))); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.conversation_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      onBackPressed(); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

}どのようにArrayListの中ですべてのアイテムを取得し、リストビュー

でそれを表示するには、これは私のチャット画面activity.Iはsqliteのデータベースから値を取得し、ArrayListの中に格納されます。私がからデータを取得しようとすると、arraylistが表示され、リストビューに表示され、最後にarraylistの項目も表示されます。どのようにarraylistのすべての項目を取得し、リストビューに読み込みます。これを行う方法?これを手伝ってください

public List<ListData> getSingleUserMsg(int user_id) { 
    List<ListData> listData = new ArrayList<>(); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery("select message,created_at,msg_type from " + TABLE_MSG + " WHERE " + USER_ID + " = " + user_id + " ORDER BY " + CREATED_AT + ";", null); 
    ListData listData1; 
    while (cursor.moveToNext()) { 
     listData1 = new ListData(); 
     String message = cursor.getString(cursor.getColumnIndexOrThrow("message")); 
     String created_at = cursor.getString(cursor.getColumnIndexOrThrow("created_at")); 
     String msg_type = cursor.getString(cursor.getColumnIndexOrThrow("msg_type")); 
     listData1.setMessage(message); 
     listData1.setMsg_type(Integer.parseInt(msg_type)); 
     listData1.setCreated_at(created_at); 
     listData.add(listData1); 
    } 
    return listData; 
} 

上記のコードは、データベースヘルパーの方法です。

+0

すべての商品が表示されます。 – R2R

+0

はいリスト項目をログに出力すると、すべての項目が表示されますが、リストビューには最後の項目だけが表示されます –

+0

あなたのdatabaseHelper.getSingleUserMsgメソッドを共有します。 –

答えて

1

forループの外側にこの行を書きます。

chatArrayAdapter = new ChatArrayAdapter(getApplicationContext(), layout_resource, dataList, msg_type); 
     chatArrayAdapter.add(new ChatMessage(message, timeFormatter.format(dateTime))); 
1

あなたがlistView初期化呼び出した後、このような問題

1.Main活動callメソッドであることだけ、あなたの設定アダプタの後receiveMessage()を呼び出すlist.Becauseをループの外にアダプタのコードを追加し、refreshreceiveMessage()

tv_name = findViewById(R.id.tv_name); 
buttonSend = findViewById(R.id.buttonSend); 
listView = findViewById(R.id.listView1); 
chatText = findViewById(R.id.chatText); 
listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
receiveMessage(); 

    private void receiveMessage() { 
    dataList = new ArrayList<>(); 
    dataList = databaseHelper.getSingleUserMsg(user_id); 
    for (int i = 0; i < dataList.size(); i++) { 
     ListData listData=dataList.get(i); 
     message = listData.getMessage(); 
     time = listData.getCreated_at(); 
     msg_type = listData.getMsg_type(); 
     Log.d("Message",message); 
     Date dateTime = null; 
     try { 
      dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a").parse(time); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(dateTime); 
     DateFormat timeFormatter = new SimpleDateFormat("h:mm a"); 
     int layout_resource; 
     if (dataList.get(i).getMsg_type() == 0) { 
      layout_resource = R.layout.item_chat_left; 
     } else { 
      layout_resource = R.layout.item_chat_right; 
     } 

    } 
    chatArrayAdapter = new ChatArrayAdapter(getApplicationContext(), layout_resource, dataList, msg_type); 
    chatArrayAdapter.add(new ChatMessage(message, timeFormatter.format(dateTime))); 
    listView.setAdapter(chatArrayAdapter); 
} 
+0

これは同じ出力を与えます –

+0

それは動作しません。それはエラーを示しています*** void android.widget.ListTranscriptMode(int) 'ヌルオブジェクトリファレンスで*** –

+0

はいリストビューの後に割り当てられたため、このreceiveMessage()を呼び出さなければなりません – R2R

関連する問題