1
你好我有一個奇怪的麻煩,我不gettings泡比如你內留言右側和我左邊......當過我叫notifydatachanges它會刪除所有氣泡。 ..plz指導我。下面是代碼...
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(D) Log.d(TAG, "In the Handler");
switch (msg.what) {
case PACKET_CAME:
String incomingMessage = (String) msg.obj;
receivedMessages.add("You: " + incomingMessage);
mg = new Message();
mg.what = 1;
updateListHandler.sendMessage(mg);
// mAdapter.notifyDataSetChanged();
// mAdapter.notifyDataSetInvalidated();
break;
case TOAST:
String toastToMake= (String) msg.obj;
Toast.makeText(getApplicationContext(), toastToMake, Toast.LENGTH_SHORT).show();
break;
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
send = (Button)findViewById(R.id.send);
send.setOnClickListener(send_listener);
//msgList.setTextFilterEnabled(true);
msg = (EditText)findViewById(R.id.msg);
msg.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-up event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_UP) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
postMessage();
return true;
}
return false;
}
});
// Start my server thread
myThread = new ServerThread(getApplicationContext(),mHandler);
//Check if it's running
if (!myThread.socketIsOK()){
Log.e(TAG,"Server NOT STARTED");
Toast.makeText(getApplicationContext(), "Cannot Start Server: ", Toast.LENGTH_LONG).show();
return;
}
// All appears to be OK, start the main loop
myThread.start();
Log.i(TAG,"Server Started");
msgList = (ListView)findViewById(R.id.msgList);
mAdapter = new CustomAdapter();
msgList.setAdapter(mAdapter);
}// end OnCreate()
public class CustomAdapter extends BaseAdapter {
public CustomAdapter(){
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = null;
Log.i("sentmsg", Integer.toString(sentmsg));
Log.i("revmsg", Integer.toString(recvmsg));
if(sentmsg == 1){
row = inflater.inflate(R.layout.message, parent, false);
TextView tv = (TextView)row.findViewById(R.id.textmsg);
tv.setText(receivedMessages.get(position));
sentmsg = 0;
}else{
row = inflater.inflate(R.layout.messagert, parent, false);
TextView tv = (TextView)row.findViewById(R.id.textmsg);
tv.setText(receivedMessages.get(position));
}
return row;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return receivedMessages.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
// Sends the message in the msg EditText
private void postMessage(){
String theNewMessage = msg.getText().toString();
try{
myThread.sendMessage(theNewMessage);
}catch(Exception e){
Log.e(TAG,"Cannot send message"+e.getMessage());
}
sentmsg = 1;
receivedMessages.add("Me: " + theNewMessage);
Message msg = new Message();
msg.what = 1;
updateListHandler.sendMessage(msg);
// msgList.invalidateViews();
// mAdapter.notifyDataSetChanged();
// mAdapter.notifyDataSetInvalidated();
// msgList.invalidateViews();
}
private Handler updateListHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
mAdapter.notifyDataSetChanged();
break;
}
;
};
};
// On click listener for the button
private OnClickListener send_listener = new OnClickListener() {
public void onClick(View v) {
postMessage();
}
};
@Override
public void onDestroy(){
super.onDestroy();
myThread.closeSocket();
}
}// Activity class
這是XML
<?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">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textmsg"
android:layout_marginTop="2px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp"
android:background="@drawable/greybox">
</TextView>
</LinearLayout>
這是另一個XML
<?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">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textmsg"
android:layout_marginTop="2px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp">
</TextView>
</LinearLayout>
greybox是9補丁圖像。 sentmsg就像一個標誌,使我可以根據收到或發送的消息膨脹所需的行...
你是否設置在XML氣泡?你在哪裏設置? – Ronnie
yess ..我有2 xml一個接收消息一個發送消息.. – Programmer
是的灰箱是9補丁圖像...我設置泡沫在xml – Programmer