我是Android编程的新手,我遇到了一个我无法克服的问题。我使用Android Studio示例构建了一个TabHost应用程序。当用户按下按钮时,我想调用另一个调出设置页面的活动(我从gui创建了一个基本活动'MySettings')。
问题1:当活动关闭时,MainActivity将重新运行onCreate,所选选项卡将返回启动选项卡。有没有办法继续上次选择的标签?
调用代码是:
public void buttonPressed(View view) {
Intent intent = new Intent(MainActivity.this,MySettings.class);
MainActivity.this.startActivity(intent);
}
问题2:我不能在两个活动之间共享数据:
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedpreferences.edit();
}
MySettings:
public class MySettings extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings_inr);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedpreferences.edit().putInt("myvar",200);
sharedpreferences.edit().apply();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
};
此代码运行,但当MySettings活动关闭时,调用活动MainActivity中的'myvar'未更新。
public void setImage(){
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
int cvt=sharedpreferences.getInt("myvar",0);
}
答案 0 :(得分:1)
问题1:
您应该在活动中保存选定的标签索引,这样当它返回时,您可以读取索引并在onCreate调用时选择它。
问题2:
@Luis Miguel Sierra关于SharedPreference的事情是正确的。
但您可能希望'startActivityForResult'将数据传回第一个活动。
开始另一项活动不一定是单向的。您还可以启动另一项活动并收到结果。要接收结果,请调用startActivityForResult()(而不是startActivity())。
例如,您的应用可以启动相机应用并接收拍摄的照片。或者,您可以启动People应用程序,以便用户选择联系人,结果您将收到联系人详细信息。
当然,响应的活动必须设计为返回结果。当它发生时,它将结果作为另一个Intent对象发送。您的活动在onActivityResult()回调中收到它。
答案 1 :(得分:0)
解决第二个问题
在意图的帮助下,您可以将数据表单一个活动转移到另一个
喜欢以下
public void buttonPressed(View view) {
Intent intent = new Intent(MainActivity.this,MySettings.class);
intent.putExtra("key","value");
MainActivity.this.startActivity(intent);
}
在第二个活动
String value=getIntent().getStrigExtras("key");
将返回值
解决第一个问题
您应该保存所选标签的位置,当您返回该活动时,将此位置分配给tabhost以重新选择标签
答案 2 :(得分:0)
如果你想在BackPress上设置当前选中的标签,那么只需保存选定的标签索引,你可以使用下面的代码重置它
viewPager.setCurrentItem(index);
如果您希望在第一次活动时收到的所有数据都进行第二次活动,那么您可以使用以下代码通过Intent发送数据
Intent intent=new Intent(CurrentActivity.this,SecondActivity.class);
intent.putExtra("id", iddata);
intent.putExtra("title", titledata);
startActivity(intent);
代码接收通过SecondActivity中的Intent发送的数据
Bundle b=getIntent().getExtras();
String id=b.getString(id);
答案 3 :(得分:0)
第一个问题: 如果它再次运行onCreate,则表示它已被销毁。如果您可以发布tablayout的创建方式,那就太好了。
其次: 要在活动之间共享数据,不应使用SharedPreferences,您应该在intent中传递数据。 SharedPreferences旨在将持久数据存储在您的应用中。
所以它应该如下所示:
Intent intent = new Intent(MainActivity.this, MySettings.class);
intent.putExtra(MySettings.PARAM, "200");
MainActivity.this.startActivity(intent);
并在MySettings中按如下方式检索它:
public class MySettings extends AppCompatActivity {
public static final String PARAM = "myvar";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings_inr);
String param = getIntent().getStringExtras(PARAM);
}
第三个:
您的var未被保存,因为每次调用edit()时,它都会创建一个新的Editor实例,因此不会保存任何值。所以只需要改变
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedpreferences.edit().putInt("myvar",200);
sharedpreferences.edit().apply();
到
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedpreferences.edit().putInt("myvar",200).apply();
答案 4 :(得分:0)
谢谢路易斯,这解决了我的第二个问题。从我使用的第二个活动中
sharedpreferences.edit().putInt("myvar",200).commit();
而不是
sharedpreferences.edit().putInt("myvar",200);
sharedpreferences.edit().commit();
再次......感谢每个人的快速反应。