如何将值从一个屏幕传递到其上一个屏幕?
考虑这种情况:我有两个活动.第一个屏幕有一个TextView按钮,第二个活动有一个EditText按钮.
如果我单击第一个按钮,则必须移至第二个活动,此处用户必须在文本框中键入内容.如果他按下第二个屏幕上的按钮,则文本框中的值应移至第一个活动,并应显示在第一个活动中TextView.
下图(来自官方文档)描述了Android活动的众所周知的生命周期:

在另一方面,当活动是由系统(例如,由于存储器需要被回收的)破坏,该活动的状态有时自动地保存和恢复由所述方法的装置onSaveInstanceState()和onRestoreInstanceState()由下图所示(也来自官方文件):

我知道,onSaveInstanceState()是不是总叫当活动即将被销毁.例如,如果由于用户按下"后退"按钮而导致销毁,则不会保留活动状态.但是在状态被保存并恢复和onSaveInstanceState()/ onRestoreInstanceState()被调用的情况下,它们究竟何时被调用?
例如,根据上面的图,onRestoreInstanceState()可以在之前onStart(),之后onStart()但之前onResume()或之后调用onResume().同样,存在几种可能性onSaveInstanceState().那他们什么时候打电话呢?
理想情况下,我希望看到一个组合图,显示活动生命周期状态和保存/恢复方法(如果存在).
我知道这是可能的,但我无法找到一种方法来触发主要活动的小部件更新.我可以播放一些一般意图吗?
我正在使用overridePendingTransition来创建我的活动并且工作正常我可以看到淡入效果非常好,但是当我尝试为活动完成动画时,它仍然是默认的向右滑动.
我在开始活动时首先尝试定义out动画,如下所示:
Intent myIntent = new Intent(a, SkdyAlert.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
a.startActivity(myIntent);
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
}
Run Code Online (Sandbox Code Playgroud)
然后我也尝试在完成活动时这样做
okBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但这些方法都不会阻止退出动画的"从右到左"幻灯片.关于我做错了什么的任何想法?
我想完成另一项活动的一项活动,例如:
在活动[A]中,单击按钮时,我调用活动[B]而不完成活动[A].
现在在Activity [B]中,有两个按钮,New和Modify.当用户点击修改然后从堆栈中弹出活动[A]并勾选所有选项.
但是当用户单击Activity [B]中的New按钮时,我将不得不从堆栈中完成Activity [A]并再次将Activity [A]重新加载到堆栈中.
我正在尝试,但我无法从堆栈中完成活动[A] ......我怎么能这样做?
我使用的代码如下:
来自活动[A]:
Intent GotoB = new Intent(A.this,B.class);
startActivityForResult(GotoB,1);
Run Code Online (Sandbox Code Playgroud)
同一活动中的另一种方法
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1)
{
if (resultCode == 1) {
Intent i = getIntent();
overridePendingTransition(0, 0);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在活动[B]中,点击按钮:
setResult(1);
finish();
Run Code Online (Sandbox Code Playgroud) 使用新的设计库有几个新的布局,如果开发人员愿意,可以改变工具栏的行为方式.由于不同的片段具有不同的行为和目标,例如,具有折叠工具栏的画廊片段显示重要照片,或者没有滚动视图的片段,不需要appbarlayout来隐藏工具栏,在活动中具有单个工具栏可以证明很难.
那么,我应该将工具栏移动到每个片段吗?如果是这样,我每次显示片段时都必须设置supportActionBar,并且还要在片段中引用活动,这会使片段的独立性无效.如果我单独将Activity放在Activity中,我必须为每个片段中的每种行为定义多个布局.什么是最好的方法?
android android-fragments android-activity android-actionbar
我从我的工人活动开始Activity(后代PreferenceActivity)如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
Run Code Online (Sandbox Code Playgroud)
MyConfigureclass没有任何setResult()电话.实际上,MyConfigure除了OnCreate()使用加载首选项之外,类没有任何代码addPreferencesFromResource.
如今onActivityResult被称为具有requestCode的1458过早,之后MyConfigure活动运行.测试1.6和2.1仿真器以及2.1设备.是否有人打电话到setResult()某处PreferenceActivity?或者如何解释这个过早的电话呢?
导出远离屏幕的活动中的等效操作是什么.就像按下后退按钮一样,活动也会消失.如何从活动内部调用它以使其自行关闭.
如上所述这里,我继承PreferenceFragment并显示它的活动中.该文档解释了如何在此处监听首选项更改,但前提是您将PreferenceActivity子类化.由于我不这样做,我如何监听偏好变化?
我已经尝试在我的PreferenceFragment中实现OnSharedPreferenceChangeListener但它似乎不起作用(onSharedPreferenceChanged似乎永远不会被调用).
到目前为止这是我的代码:
SettingsActivity.java
public class SettingsActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
SettingsFragment.java
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener
{
public static final String KEY_PREF_EXERCISES = "pref_number_of_exercises";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
//IT NEVER GETS …Run Code Online (Sandbox Code Playgroud) android android-preferences sharedpreferences android-fragments android-activity
我正在学习构建Android应用程序,我需要一些特定的帮助.我似乎无法理解我需要更改哪些模板代码,以及哪些位是静态的.
在LAYOUT文件夹中,我有我的ACTIVITY_MAIN.XML读取
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/main_buttons_photos" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
接下来,我有我的第二个活动ACTIVITY_SEND_PHOTOS.XML这是
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
tools:context=".SendPhotos" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/title_activity_send_photos"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
然后我有我的MainActivity.java(这是.class?)这个包com.example.assent.bc;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu …Run Code Online (Sandbox Code Playgroud)