在我给出的代码里面,会出现这样的情况,就是发送一条短信后,上面的EditText 会变空,然后这个时候如果按back键的话,就会回到上面最后一个图的界面,我觉得这个应该不合理吧。我认为如果短信发送成功的话应该退出这个界面,或者保持原来的状态不变,也不至于出现我上面说的情况吧  android的 activity直接的切换好像挺不容易的啊   我用 finish也没办法控制。
希望有经验的人能够帮我看下,谢谢

解决方案 »

  1.   

    SendMsg调用完毕后就将edittext清空....应该发送完毕只是显示toast而已,当前界面不会退出
      

  2.   

    我的意思就是想让 当前的activity退出啊  如何控制呢? 有或者说 我就想保持原来的输入的内容不变 又如何操作呢???还有 我觉得 finish  好像不怎么好用啊 不最大你们的感觉如何?
      

  3.   

    我的代码,看着有点乱,不好意思了,挑重要部分看好了
    回答问题:
    1.我的意思就是想让 当前的activity退出啊 如何控制呢?
    你是想说点击发送后直接退出这个界面么?使用finish吧。虽然看起来并没有finish掉,但是这似乎是唯一简单可靠的方法,在我看来。。2.我就想保持原来的输入的内容不变
    在我的代码里,如果将onClickListener里面下面两行注释掉,发送后,editText里面的内容会保留。可能是大家用的Android版本不同吧,我用2.1作为模拟器测试的。PS: 关于finish,这个不太清楚了,还需要时间进一步研究一下,不好意思鸟
      mEditText1.setText(""); 
      mEditText2.setText(""); package irdc.EX05_03;import java.util.ArrayList;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;import android.app.Activity;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.os.Bundle;
    import android.telephony.gsm.SmsManager;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;@SuppressWarnings("deprecation")
    public class EX05_03 extends Activity  

      /*宣告變數一個Button與兩個EditText*/
      private Button mButton1; 
      private EditText mEditText1; 
      private EditText mEditText2; 
       
      /** Called when the activity is first created. */ 
      @Override 
      public void onCreate(Bundle savedInstanceState) 
      { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        
        /*透過findViewById建構子來建構EditText1,EditText2與Button物件*/ 
        mEditText1 = (EditText) findViewById(R.id.myEditText1); 
        mEditText2 = (EditText) findViewById(R.id.myEditText2); 
        mButton1 = (Button) findViewById(R.id.myButton1); 
        
        /*將預設文字載入EditText中*/
        mEditText1.setHint("請輸入電話號碼"); 
        mEditText2.setHint("請輸入簡訊內容!!"); 
        
        /*設定onClickListener 讓使用者點選EditText時做出反應*/
    //    mEditText1.setOnClickListener(new EditText.OnClickListener()
    //    {
    //      public void onClick(View v)
    //      {
    //        /*點選EditText時清空內文*/
    //        mEditText1.setText("");
    //      }
    //    }
    //    );
    //    
        /*設定onClickListener 讓使用者點選EditText時做出反應*/
    //    mEditText2.setOnClickListener(new EditText.OnClickListener()
    //    {
    //      public void onClick(View v)
    //      {
    //        /*點選EditText時清空內文*/
    //        mEditText2.setText("");
    //      }
    //    }
    //    );
         
        /*設定onClickListener 讓使用者點選Button時做出反應*/
        mButton1.setOnClickListener(new Button.OnClickListener() 
        {       @SuppressWarnings("deprecation")
          @Override 
          public void onClick(View v) 
          { 
            /*由EditText1取得簡訊收件人電話*/
            String strDestAddress = mEditText1.getText().toString(); 
            /*由EditText2取得簡訊文字內容*/
            String strMessage = mEditText2.getText().toString(); 
            /*建構一取得default instance的 SmsManager物件 */
            SmsManager smsManager = SmsManager.getDefault(); 
          
            // TODO Auto-generated method stub 
            /*檢查收件人電話格式與簡訊字數是否超過70字元*/
            if(isPhoneNumberValid(strDestAddress)==true && iswithin70(strMessage)==true)
            {
            try 
              { 
              /*兩個條件都檢查通過的情況下,發送簡訊
               * 先建構一PendingIntent物件並使用getBroadcast()方法進行Broadcast
               * 將PendingIntent,電話,簡訊文字等參數傳入sendTextMessage()方法發送簡訊*/
                PendingIntent mPI = PendingIntent.getBroadcast(EX05_03.this, 0, new Intent(), 0); 
                smsManager.sendTextMessage(strDestAddress, null, strMessage, mPI, null); 
              } 
            catch(Exception e) 
              { 
              e.printStackTrace(); 
              } 
              Toast.makeText(EX05_03.this,
                "送出成功!!" , 
                Toast.LENGTH_SHORT).show();
              mEditText1.setText(""); 
              mEditText2.setText(""); 
            
            }
            /*電話格式與簡訊文字不符合條件時,使用Toast告知使用者檢查*/
            else 
            { /*電話格式不符*/
              if (isPhoneNumberValid(strDestAddress)==false)
              { /*且字數超過70字元*/
                if(iswithin70(strMessage)==false)
                {
                  Toast.makeText(EX05_03.this, 
                      "電話號碼格式錯誤+簡訊內容超過70字,請檢查!!", 
                      Toast.LENGTH_SHORT).show();
                }
                else
                {
                Toast.makeText(EX05_03.this,
                    "電話號碼格式錯誤,請檢查!!" , 
                    Toast.LENGTH_SHORT).show();
                }
              }
              /*字數超過70字元*/
              else if (iswithin70(strMessage)==false)
              {
                ArrayList<String> multiMessage = smsManager.divideMessage(strMessage);
               // String [] sMultiMessage = (String[]) multiMessage.toArray();
                
                try 
                { 
                /*兩個條件都檢查通過的情況下,發送簡訊
                 * 先建構一PendingIntent物件並使用getBroadcast()方法進行Broadcast
                 * 將PendingIntent,電話,簡訊文字等參數傳入sendTextMessage()方法發送簡訊*/
                  int i = 0;
                //  for (i=0; i<sMultiMessage.length; i++){
                  PendingIntent mPI = PendingIntent.getBroadcast(EX05_03.this, 0, new Intent(), 0); 
                //  smsManager.sendTextMessage(strDestAddress, null, sMultiMessage[i], mPI, null); 
                //  }
                  // 或者採用smsManager.sendMultipartTextMessage的方法
                  // 待查如何設置ArrayList<PendingIntent>
                   ArrayList<PendingIntent> multiPI = new ArrayList<PendingIntent>();
                   
                   for(i=0; i<multiMessage.size(); i++)
                   multiPI.add(mPI);
                   
                   smsManager.sendMultipartTextMessage(strDestAddress, null, multiMessage, multiPI, null);             } 
              catch(Exception e) 
                { 
                e.printStackTrace(); 
                }
                
    //            Toast.makeText(EX05_03.this, 
    //                "簡訊內容超過70字,請刪除部分內容!!", 
    //                Toast.LENGTH_SHORT).show();
              Toast.makeText(EX05_03.this,
                  "送出成功!!" , 
                  Toast.LENGTH_SHORT).show();
                mEditText1.setText(""); 
                mEditText2.setText(""); 
              }
            }
          }
        }); 
         
      }
      /*檢查字串是否為電話號碼的方法,並回傳true or false的判斷值*/
      public static boolean isPhoneNumberValid(String phoneNumber)
      {
         boolean isValid = false;
         /* 可接受的電話格式有:
          * ^\\(? : 可以使用 "(" 作為開頭
          * (\\d{3}): 緊接著三個數字
          * \\)? : 可以使用")"接續
          * [- ]? : 在上述格式後可以使用具選擇性的 "-".
          * (\\d{3}) : 再緊接著三個數字
          * [- ]? : 可以使用具選擇性的 "-" 接續.
          * (\\d{4})$: 以四個數字結束.
          * 可以比對下列數字格式:
          * (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890  
         */
         //String expression = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$";
         String expression = "^\\(?(\\d{1})\\)?[- ]?(\\d{1})[- ]?(\\d{2})$";
         /* 可接受的電話格式有:
          * ^\\(? : 可以使用 "(" 作為開頭
          * (\\d{2}): 緊接著兩個數字
          * \\)? : 可以使用")"接續
          * [- ]? : 在上述格式後可以使用具選擇性的 "-".
          * (\\d{4}) : 再緊接著四個數字
          * [- ]? : 可以使用具選擇性的 "-" 接續.
          * (\\d{4})$: 以四個數字結束.
          * 可以比對下列數字格式:
          * (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890  
         */
         String expression2 ="^\\(?(\\d{2})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$";
         CharSequence inputStr = phoneNumber;
         /*建立Pattern*/
         Pattern pattern = Pattern.compile(expression);
         /*將Pattern 以參數傳入Matcher作Regular expression*/ 
         Matcher matcher = pattern.matcher(inputStr);
         /*建立Pattern2*/
         Pattern pattern2 =Pattern.compile(expression2);
         /*將Pattern2 以參數傳入Matcher2作Regular expression*/ 
         Matcher matcher2= pattern2.matcher(inputStr);
         if(matcher.matches()||matcher2.matches())
         {
         isValid = true;
         }
         return isValid; 
       }
      public static boolean iswithin70(String text)
      {
        if (text.length()<= 70)
          return true;
        else
          return false;
      }
      

  4.   

    现在我知道了为什么会出现我说的情况了   PendingIntent.getActivity(this,0 , new Intent(/*this,SendMsgActivity.class*/),0); 这里的 new Intent的时候参数传进去一个 新的 Activity(也就是自己的Activity),这里如果不传参的话 就没有问题  呵呵  这个还真有点搞不懂