2012-07-11 47 views
0

我的主要活動中有一個TextView。從Intent回來後執行代碼

按下一個按鈕,我打開另一個活動,並獲得了選擇,我可以重命名我的 的TextView

btnSet.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      Intent intent = new Intent(MainActivity.this, Options.class); 
      startActivity(intent); 



     } 
    }); 

在我選擇的活動我重新命名我的TextView這樣

public class Options extends MainActivity{ 

public static Boolean isRenamed; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.options); 

    String lblName = ("Counter 1"); 
    Button btnOk = (Button) findViewById(R.id.btn_ok); 
    btnOk.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent backToMain = new Intent(Options.this, MainActivity.class);  
      EditText labelName = (EditText) findViewById(R.id.set_name); 
      String lblName = labelName.getText().toString(); 
      backToMain.putExtra(LABEL_NAME, lblName); 
      isRenamed = true; 
      startActivity(backToMain); 
      finish(); 


     } 
    }); 
} 

}

我正在使用布爾isRenamed,並在點擊確定後將其設置爲true

在我的主要活動我已經設置此

if (Options.isRenamed == true) { 

    // Get the message from the intent 
     Intent backToMain = getIntent(); 
     String lblName = backToMain.getStringExtra(Options.LABEL_NAME); 

     // Edit the text view 
     TextView label = (TextView) findViewById(R.id.label1); 
     label.setText(lblName); 

    } 

現在它的強制關閉,但有一些更優雅的方式,看看是否我已經重命名的文件,然後執行這段代碼設置它?

+2

看看startActivityForResult( ...); – Carnal 2012-07-11 14:59:29

回答

0

使用startActivityForResult()而不是startActivity()。在選項活動:

public static final int RENAMED = 100; 

btnOk.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent backToMain = new Intent(Options.this, MainActivity.class);  
      EditText labelName = (EditText) findViewById(R.id.set_name); 
      String lblName = labelName.getText().toString(); 
      backToMain.putExtra(LABEL_NAME, lblName); 
      isRenamed = true; 
      setResult(RENAMED); 
      finish(); 


     } 
    }); 

在MainActiviy,覆蓋onActivityResult()和 如果resultCode放慢參數是等於更名時,它被觸發檢查。

1
Context.startActivityForResult(); 

在那裏做所有的重命名和其他的東西。返回一個簡單的整數來知道發生了什麼。這樣,當您在第二個活動中調用finish()時,它將返回到第一個,而不創建新實例。

0

此塞納里奧您需要在Options活動您CA setResult(resultCode, data),並呼籲結束使用的

startActivityForResult(intent, requestCode) 

代替startActivity(intent)

MainActivity您可以在

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
} 
0

使用數據,可以使用

startActivityForResult(intent, intentsData.REQUEST_CODE); 

,然後改變你的TextView當活動恢復

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      /** 
      * change your TextView 
      */ 
      super.onActivityResult(requestCode, resultCode, data); 
    }