リスト ビューを使用して各チャット メッセージを表示するチャット アプリケーションを作成しています。リストの上に編集テキストとボタンが表示されるように xml レイアウトを作成しました。私の問題は、チャットメッセージが画面サイズを超えると、編集テキストの下に表示されるため、メッセージを表示するには上にスクロールする必要があることです..前のメッセージをすべて上に移動し、最新のメッセージをedittextビュー..この問題を解決するのに役立つ人はいますか..私のxmlレイアウトコードを以下に示します..
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/listView"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1.0"
></ListView>
<LinearLayout
android:id="@+id/llout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom">
<EditText
android:id="@+id/txt_inputText"
android:layout_width="125px"
android:layout_height="wrap_content"
android:text = "Text here"
android:layout_weight="0.8"
/>
<Button
android:id="@+id/btn_Send"
android:layout_width="100px"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="Send"
/>
</LinearLayout>
</LinearLayout>
ジャバコード:
public class AndyChatActivity extends Activity {
private Handler handler = new Handler();
public ListView msgView;
List<String> values=new ArrayList<String>();
LazyAd l;
public ArrayAdapter<String> msgList;
// public ArrayAdapter<String> msgList=new ArrayAdapter<String>(this,
// android.R.layout.simple_list_item_1);;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listtest);
msgView = (ListView) findViewById(R.id.listView);
msgList = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
msgView.setAdapter(msgList);
// msgView.smoothScrollToPosition(msgList.getCount() - 1);
Button btnSend = (Button) findViewById(R.id.btn_S);
receiveMsg();
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(AndyChatActivity.this, "here", Toast.LENGTH_SHORT).show();
final EditText txtEdit = (EditText) findViewById(R.id.txt_i);
String msg=txtEdit.getText().toString();
Toast.makeText(AndyChatActivity.this, msg, Toast.LENGTH_SHORT).show();
//msgList.add(txtEdit.getText().toString());
Log.d("checking", "below botton");
sendMessageToServer(txtEdit.getText().toString());
msgView.smoothScrollToPosition(msgList.getCount() - 1);
}
});
//receiveMsg();
//----------------------------
//server msg receieve
//-----------------------
//End Receive msg from server//
}
public void sendMessageToServer(String str) {
final String str1=str;
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//String host = "https://www.tudens.in";
String host="192.168.1.4";
//Toast.makeText(AndyChatActivity.this, "thread Opened", Toast.LENGTH_SHORT).show();
//String host2 = "127.0.0.1";
PrintWriter out;
try {
Socket socket = new Socket(host, 8008);
out = new PrintWriter(socket.getOutputStream());
Log.d("1", "good");
// out.println("hello");
out.println(str1);
Log.d("2", "gd");
out.flush();
String str="Me : "+str1;
displayMsg(str);
Log.d("", "hello");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("", "hello222");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("", "hello4333");
}
}
}).start();
}
public void receiveMsg()
{
new Thread(new Runnable()
{
@Override
public void run() {
// TODO Auto-generated method stub
Log.d("checking", "inside tread");
final String host="192.168.1.4";
//final String host="10.0.2.2";
//final String host="localhost";
Socket socket = null ;
BufferedReader in = null;
try {
socket = new Socket(host,8008);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true)
{
String msg = null;
try {
msg = in.readLine();
Log.d("","MSGGG: "+ msg);
//msgList.add(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(msg == null)
{
break;
}
else
{
displayMsg(msg);
}
}
}
}).start();
}
public void displayMsg(String msg)
{
final String mssg=msg;
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
values.add(mssg);
l=new LazyAd(AndyChatActivity.this,values);
// msgList.add(mssg);
msgView.setAdapter(l);
msgView.smoothScrollToPosition(msgList.getCount() - 1);
Log.d("","hi");
}
});
}
}