2012-03-27 52 views
0

我想在用戶回到我的第一個活動時恢復編輯文本的值? 請幫我一把。如何在我移動到下一個活動並再次返回時恢復活動的值?

在此先感謝

這是在編輯文本獲取用戶價值我的第一個活動代碼

public class IntentActivity extends Activity { 
EditText ed1, ed2; 
float ed1_val, ed2_val; 

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

    ed1 = (EditText) findViewById(R.id.editText1); 
    ed2 = (EditText) findViewById(R.id.editText2); 
    Button next = (Button) findViewById(R.id.button1); 

    next.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), 
        Second_activity.class); 
      startActivity(intent); 
     } 
    }); 
} 

/** Called when the activity is first created. */ 
@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 

    ed1_val = Float.parseFloat(ed1.getText().toString()); 
    ed2_val = Float.parseFloat(ed2.getText().toString()); 

    Log.v("TAG", "inside saved instance"); 
    savedInstanceState.putFloat("ed1", +ed1_val); 
    savedInstanceState.putFloat("ed2", +ed2_val); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    Log.v("TAG", "inside on restore"); 
    float ed_val = savedInstanceState.getFloat("ed1"); 
    float ed2_val = savedInstanceState.getFloat("ed2"); 

    ed1.setText("" + ed_val); 
    ed2.setText("" + ed2_val); 
    } 
} 

這是我的第二個活動代碼

public class Second_activity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second_xml); 

    Button back = (Button) findViewById(R.id.button1); 
    back.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), 
        IntentActivity.class); 
      startActivity(intent); 
      } 
     }); 
    } 
} 
+0

是否要從Second_activity向IntentActivity發送測試,還是要確保在活動恢復時恢復IntentActivity中的文本框中輸入的文本? – 2012-03-27 09:42:30

+0

是的,我希望當我回到活動時輸入的文本被恢復。 – Shri 2012-03-27 09:45:28

回答

1

您既不需要onSaveInstanceState也不需要onRestoreInstanceState。 只需調用在onclick監聽器完成在第二個活動按鈕:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class IntentActivity extends Activity { 
    EditText ed1, ed2; 
    float ed1_val, ed2_val; 

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

     ed1 = (EditText) findViewById(R.id.editText1); 
     ed2 = (EditText) findViewById(R.id.editText2); 
     Button next = (Button) findViewById(R.id.button1); 

     next.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(getApplicationContext(), 
         Second_activity.class); 
       startActivity(intent); 
      } 
     }); 
    } 

} 

這是第二個:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class Second_activity extends Activity { 
    // TODO Auto-generated method stub 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second_xml); 

     Button back = (Button) findViewById(R.id.button1); 
     back.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 
    } 
} 

您在恢復以前的活動,而不是開始新的一個途徑。 如果您需要通過它們之間的數據可以使用startActivityForResult/onActivityResult的setResult方法:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class IntentActivity extends Activity { 
    private static final int GET_VALUES_REQUEST_ID = 1; 
    public static final String FIRST_VALUE_ID = "first_value_id"; 
    public static final String SECOND_VALUE_ID = "second_value_id"; 
    private static final float DEFAULT_VALUE = 0; 

    EditText ed1, ed2; 
    float ed1_val, ed2_val; 

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

     ed1 = (EditText) findViewById(R.id.editText1); 
     ed2 = (EditText) findViewById(R.id.editText2); 
     Button next = (Button) findViewById(R.id.button1); 

     next.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(getApplicationContext(), 
         Second_activity.class); 
       startActivityForResult(intent, GET_VALUES_REQUEST_ID); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
     case GET_VALUES_REQUEST_ID: { 
      if (Activity.RESULT_OK == resultCode) { 
       ed1_val = data.getFloatExtra(FIRST_VALUE_ID, DEFAULT_VALUE); 
       ed2_val = data.getFloatExtra(SECOND_VALUE_ID, DEFAULT_VALUE); 
       setValues(); 
      } 
      break; 
     } 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 


    protected void setValues() { 
     ed1.setText(Float.toString(ed1_val)); 
     ed2.setText(Float.toString(ed2_val)); 
    } 

} 

第二個活動可能是類似的東西:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class Second_activity extends Activity { 
    // TODO Auto-generated method stub 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second_xml); 

     Button back = (Button) findViewById(R.id.button1); 
     back.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent data = new Intent(); 
       data.putExtra(IntentActivity.FIRST_VALUE_ID, 324f); 
       data.putExtra(IntentActivity.SECOND_VALUE_ID, 32234f); 
       setResult(Activity.RESULT_OK, data); 
       finish(); 
      } 
     }); 
    } 
} 

這是一個非常基本的例子,所以我只是硬編碼一些返回值 - 請實現更有意義的東西。 除此之外,你可以避免在類名中使用下劃線作爲分隔符 - 駱駝案例更符合名稱約定。

+0

發送的硬編碼值正在打印,但我想要恢復用戶在第一個活動的編輯文本中輸入的數據。 – Shri 2012-03-28 07:21:03

+0

你可以試試我給出的第一個例子嗎? :)如果我有你的權利,他們應該做你需要的。 – 2012-03-28 08:40:14

2

這不是一個好主意在按下時再次開始第一個活動。在第二個活動中調用finish()。這將導致您需要的第一項活動的恢復。

back.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     finish();   } 
    }); 
} 
+0

但如果我有三項活動並從第三項回到第一項活動? – Shri 2012-03-27 09:49:45

+0

onResume不會被調用。你的活動將會重新開始。如果你繼續按下後退按鈕,這可能會導致大量的活動創作,這是不必要的。 – user936414 2012-03-27 09:56:08

+0

只有在調用activity的onStop()時纔會調用onRestoreInstanceState方法。查看活動的生命週期以獲取更多詳細信息。 – user936414 2012-03-27 10:14:54

0

剛剛完成第二個活動,不要通過意向啓動它。 當您完成第二個活動的第一項活動將自動恢復,

1

,你可以去覆蓋保護無效的onSaveInstanceState(捆綁outState)保護無效onRestoreInstanceState(捆綁savedInstanceState)

Here就是一個例子

記住它會工作,當你不會完成你以前的活動。在你的第一個活動做到這一點。

+0

是不是正是他所做的? – njzk2 2012-03-27 10:13:00

0

您正在按第二個活動上的返回按鈕開始新活動。新的活動實例不是先前啓動第二個活動的實例,因此onRestoreInstanceState回調沒有被調用。

+0

我想這就是問題所在,但在這種情況下我應該怎麼做? – Shri 2012-03-27 09:52:15

+0

只需通過在按下按鈕 – Relsell 2012-03-27 09:54:11

+0

時調用finish()來完成第二個活動,它可以正常工作,但如果我在意圖中發送包數據呢? – Shri 2012-03-27 10:00:48

相關問題