我想知道,为什么在活动开始时只调用OnCreate()
一次?
我们可以在同一活动中多次拨打OnCreate()
吗?
如果是,我们怎么称呼呢?谁能举个例子?
非常感谢!!!
答案 0 :(得分:6)
你为什么要再次打电话?除非重建活动,由系统调用。您无法手动调用OnCreate,这与您不会两次调用setContentView()的原因相同。作为文档:
onCreate(Bundle)是初始化活动的地方。最 重要的是,在这里你通常会用一个调用setContentView(int) 布局资源定义您的UI,并使用findViewById(int)来 检索该UI中需要与之交互的小部件 编程。 一旦你完成初始化你的小部件你为什么要这样做?
<强>更新强>
我回过头来说,你可以手动完成这个,但我仍然不明白为什么要调用它。你试过Fragments吗?
Samplecode:
public class MainActivity extends Activity implements OnClickListener {
private Button btPost;
private Bundle state;
private int counter = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
state = savedInstanceState;
btPost = (Button) findViewById(R.id.btPost);
btPost.setOnClickListener(this);
Toast.makeText(getBaseContext(), " " + counter, Toast.LENGTH_LONG)
.show();
}
@Override
public void onClick(View v) {
counter++;
this.onCreate(state);
}
}
答案 1 :(得分:1)
onCreate()方法执行基本的应用程序启动逻辑,该逻辑在活动的整个生命周期中只应发生一次。 onCreate()完成执行后,系统会快速连续调用 onStart()和 onResume()方法。
初始化过程 consumes lot of resources
并且为了避免这种情况,一旦创建的活动永远不会被完全销毁,但在后台仍然不可见,因此一旦它被带回到前面,重新初始化就不会不会发生。
答案 2 :(得分:1)
您想要手动调用onCreate。
然后就这样做。
finish();
Intent intent = new Intent(Main.this, Main.class);
startActivity(intent);
finish()调用当前的东西。
如果你在这个活动中做了一些getExtra,那么就这样做,
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("key",your_variable);
super.onSaveInstanceState(outState);
}
并将其添加到onCreate()
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
if(savedInstanceState != null)
{
your_variable= savedInstanceState.getString("key");
}
}
答案 3 :(得分:0)
为什么要多次拨打onCreate
?您将重新创建活动。如果这是您出于任何原因所需的内容,则完成活动并使用intent
创建该活动的新实例。否则,您同时有两个活动实例。希望有所帮助,但如果这没有意义,那么添加更多关于你想要的信息,以便我们有上下文
答案 4 :(得分:0)
OnCreate基本上用于创建您的活动(UI)。如果您已经创建了活动,则无需再次创建活动。
它主要用于初始化您的活动并创建活动的用户界面。 Activity是一个可以反复使用的可视部分。我认为你的问题不是重新创建活动,而是重新初始化活动的所有组件。为此,您可以创建一个方法initialize_act()并从任何地方调用它......
答案 5 :(得分:0)
@OnCreate仅用于初始创建,因此只应调用一次。
如果你想要多次完成任何处理,你应该把它放在别处,也许是在@OnResume方法中。
答案 6 :(得分:0)
最近我意识到onCreate会在每个屏幕方向更改(横向/纵向)上调用。在规划初始化过程时,您应该注意这一点。 可以在AndroidManifest.xml中禁止重新创建:
<activity
android:configChanges="keyboardHidden|orientation"
android:name=".testActivity"
android:label="@string/app_name"></activity>