2012-03-27 67 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

相关问题