如何将EditText更改为android中的listview

时间:2015-04-16 08:28:43

标签: android android-layout listview chat

我设计了聊天应用程序,但我使用了示例,但在示例中使用EditText显示消息,而发送者和接收者没有样式。我想将EditText更改为列表视图或其他TextView。

消息传递java代码:

public class Messaging extends Activity {

    private static final int MESSAGE_CANNOT_BE_SENT = 0;
    public String username;
    private EditText messageText;
    private EditText messageHistoryText;
    private Button sendMessageButton;
    private TextView leftuser,leftmsg,rightuser,rightmsg;
    private IAppManager imService;
    private FriendInfo friend = new FriendInfo();
    private LocalStorageHandler localstoragehandler; 
    private Cursor dbCursor;

    private ServiceConnection mConnection = new ServiceConnection() {



        public void onServiceConnected(ComponentName className, IBinder service) {          
            imService = ((IMService.IMBinder)service).getService();
        }
        public void onServiceDisconnected(ComponentName className) {
            imService = null;
            Toast.makeText(Messaging.this, R.string.local_service_stopped,
                    Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);    

        setContentView(R.layout.messaging_screen); //messaging_screen);

    messageHistoryText = (EditText) findViewById(R.id.messageHistory);

        messageText = (EditText) findViewById(R.id.inputMsg);

        messageText.requestFocus();         

        sendMessageButton = (Button) findViewById(R.id.btnSend);

        Bundle extras = this.getIntent().getExtras();


        friend.userName = extras.getString(FriendInfo.USERNAME);
        friend.ip = extras.getString(FriendInfo.IP);
        friend.port = extras.getString(FriendInfo.PORT);
        String msg = extras.getString(MessageInfo.MESSAGETEXT);



        setTitle("messaging with" + friend.userName);


    //  EditText friendUserName = (EditText) findViewById(R.id.friendUserName);
    //  friendUserName.setText(friend.userName);


        localstoragehandler = new LocalStorageHandler(this);
        dbCursor = localstoragehandler.get(friend.userName, IMService.USERNAME );

        if (dbCursor.getCount() > 0){
        int noOfScorer = 0;
        dbCursor.moveToFirst();
            while ((!dbCursor.isAfterLast())&&noOfScorer<dbCursor.getCount()) 
            {
                noOfScorer++;

                this.appendToMessageHistory(dbCursor.getString(2) , dbCursor.getString(3));
                dbCursor.moveToNext();
            }
        }
        localstoragehandler.close();

        if (msg != null) 
        {
            this.appendToMessageHistory(friend.userName , msg);
            ((NotificationManager)getSystemService(NOTIFICATION_SERVICE)).cancel((friend.userName+msg).hashCode());
        }

        sendMessageButton.setOnClickListener(new OnClickListener(){
            CharSequence message;
            Handler handler = new Handler();
            public void onClick(View arg0) {
                message = messageText.getText();
                if (message.length()>0) 
                {       
                    appendToMessageHistory(imService.getUsername(), message.toString());

                    localstoragehandler.insert(imService.getUsername(), friend.userName, message.toString());

                    messageText.setText("");
                    Thread thread = new Thread(){                   
                        public void run() {
                            try {
                                if (imService.sendMessage(imService.getUsername(), friend.userName, message.toString()) == null)
                                {

                                    handler.post(new Runnable(){    

                                        public void run() {

                                            Toast.makeText(getApplicationContext(),R.string.message_cannot_be_sent, Toast.LENGTH_LONG).show();


                                            //showDialog(MESSAGE_CANNOT_BE_SENT);                                       
                                        }

                                    });
                                }
                            } catch (UnsupportedEncodingException e) {
                                Toast.makeText(getApplicationContext(),R.string.message_cannot_be_sent, Toast.LENGTH_LONG).show();

                                e.printStackTrace();
                            }
                        }                       
                    };
                    thread.start();

                }

            }});

        messageText.setOnKeyListener(new OnKeyListener(){
            public boolean onKey(View v, int keyCode, KeyEvent event) 
            {
                if (keyCode == 66){
                    sendMessageButton.performClick();
                    return true;
                }
                return false;
            }


        });

    }

    @Override
    protected Dialog onCreateDialog(int id) {
        int message = -1;
        switch (id)
        {
        case MESSAGE_CANNOT_BE_SENT:
            message = R.string.message_cannot_be_sent;
        break;
        }

        if (message == -1)
        {
            return null;
        }
        else
        {
            return new AlertDialog.Builder(Messaging.this)       
            .setMessage(message)
            .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    /* User clicked OK so do some stuff */
                }
            })        
            .create();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(messageReceiver);
        unbindService(mConnection);

        FriendController.setActiveFriend(null);

    }

    @Override
    protected void onResume() 
    {       
        super.onResume();
        bindService(new Intent(Messaging.this, IMService.class), mConnection , Context.BIND_AUTO_CREATE);

        IntentFilter i = new IntentFilter();
        i.addAction(IMService.TAKE_MESSAGE);

        registerReceiver(messageReceiver, i);

        FriendController.setActiveFriend(friend.userName);      


    }


    public class  MessageReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) 
        {       
            Bundle extra = intent.getExtras();
            String username = extra.getString(MessageInfo.USERID);          
            String message = extra.getString(MessageInfo.MESSAGETEXT);

            if (username != null && message != null)
            {
                if (friend.userName.equals(username)) {
                    appendToMessageHistory(username, message);
                    localstoragehandler.insert(username,imService.getUsername(), message);

                }
                else {
                    if (message.length() > 15) {
                        message = message.substring(0, 15);
                    }
                    Toast.makeText(Messaging.this,  username + " says '"+
                                                    message + "'",
                                                    Toast.LENGTH_SHORT).show();     
                }
            }           
        }

    };
    private MessageReceiver messageReceiver = new MessageReceiver();

    public  void appendToMessageHistory(String username, String message) {
        if (username != null && message != null) {


            messageHistoryText.append(username + ":\n");                                
            messageHistoryText.append(message + "\n");
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (localstoragehandler != null) {
            localstoragehandler.close();
        }
        if (dbCursor != null) {
            dbCursor.close();
        }
    }


}

和xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"
    android:padding="10dip" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<!--    
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dip"
        android:text="Friend:"
    />

    <EditText android:id="@+id/friendUserName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:singleLine="true"
        android:editable="false" />
--> 
    <TextView   android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dip"
                android:text="Messages:"/>

    <EditText  android:id="@+id/messageHistory"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:clickable="true"    
                android:layout_weight="1"
                android:editable="false"
                android:gravity="top"
                android:scrollbars="vertical"
                android:scrollbarSize="10px"
                /> 

    <LinearLayout android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:layout_weight="4">

            <EditText   android:id="@+id/message"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="top"
                        android:layout_weight="1"
                        />

            <Button android:id="@+id/sendMessageButton"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_weight="4"
                    android:text="Send"/>

    </LinearLayout>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则无法更改EditText对象本身。您可以做的是用新视图替换EditText

//currentView is your EditText
ViewGroup parent = (ViewGroup) currentView.getParent();
final int index = parent.indexOfChild(currentView);
removeView(currentView);
removeView(newView);
parent.addView(newView, index);

答案 1 :(得分:0)

EditText.setFocusable(false);
EditText.setClickable(true);