标签: oncreate

连续两次调用Activity.setContentView()的副作用

在我的应用程序中,我需要findViewbyId()从两者onCreate()和来自WebChromeClient.onCompletion().为了避免findViewbyId() 返回null,我在调用Activity.setContentView(int viewResID)之前使用了调用findViewbyId().

它有效,但现在我想知道我是否可能在我的代码中创建一个"定时炸弹".

在做这样的事情时,我需要记住一些警告吗?

android android-layout oncreate

4
推荐指数
1
解决办法
3023
查看次数

Android SQLite - 为什么每次重新创建我的数据库?

我试图更好地理解SQLiteOpenHelper类以及如何以及何时调用onCreate和onUpgrade.

我的问题是,每次我退出并启动我的应用程序(从技术上讲,实际上每次我创建一个新的MyDB实例),onCreate被调用,并且以前用法的所有数据都被有效擦除... WTF ???

我最初通过创建一个单独的MyDBFactory解决了这个问题,我在其中创建了一个MyDB实例.这使得数据在应用程序运行时至少是持久的.

我想要的是我的数据库架构和数据是持久的!

我基本上有:

   public class MyDB extends SQLiteOpenHelper{
      private static int VERSION = 1;
      ...
      public ContactControlDB(Context context) {
        super(context, null, null, VERSION);
      }

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL(DATABASE_CREATE);
        db.execSQL(INSERT_DATA);
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

public class MyDBFactory{

private static MyDB db;

public static MyDB getInstance(Context context) {
    if(db == null) {
        db = new MyDB (context);
    }
    return db;
}
Run Code Online (Sandbox Code Playgroud)

}

我想知道的是为什么每次我有'新MyDB(上下文)'时调用onCreate,以及每次我的应用程序退出时我的数据库都会被调用.

如果你有一些合适的链接,或者一些可以让我知道的知识,我会非常感激!

sql android oncreate

4
推荐指数
1
解决办法
1302
查看次数

onCreate() 在 Activity 停止(但未销毁)时调用。仅在安装后

我正在开发一个针对 Api 19 的应用程序,它基本上是一个处理草图。

我面临的问题是我的应用程序第一次运行时,在安装后,它运行良好,直到用户将其发送到后台。然后,如果他们再次单击应用程序图标,则调用 onCreate() 但活动不会被销毁或重新启动。一些变量会发生变化,从而产生奇怪的行为。

这仅在第一次使用该应用程序时发生。强制关闭它后,这种行为不会再发生(据我测试)。从 Eclipse 启动应用程序时也不会发生这种情况。

总而言之,这是第一次强制关闭后发生的情况(我认为是正确的):

  • 活动正在运行。

  • 活动通过主页按钮返回

  • 暂停()

  • 我们再次点击应用程序图标

  • onResume()

这就是 - 仅 - 安装后第一次运行应用程序时发生的情况:

  • 活动正在运行。

  • 活动通过主页按钮返回

  • 暂停()

  • 我们再次点击应用程序图标

  • onCreate() <-- !! 注意没有 onDestroy()

  • onResume()

我想知道我使用沉浸式模式是否与此有关,但是将 Api 目标版本更改为 10、删除沉浸式模式或在旧设备上进行测试都无济于事。当然,我在清单上使用了android:configChanges="orientation|keyboardHidden|screenSize"

有没有人知道可能导致这种情况的原因?这是一个常见问题还是我应该在我的代码中查找错误?也许是处理错误?

提前感谢您提供任何线索。我希望这是询问这个问题的正确方式。这是我的第一篇文章。

更新: 我的解释不是很准确,但显然有一个错误报告。这个问题在这里解释得更好:https : //code.google.com/p/android/issues/detail?id=26658

不幸的是,我无法使建议的解决方案起作用,在 onCreate() 中使用它会导致我的应用程序关闭或崩溃:

if (!isTaskRoot()) {
  finish();
  return;
} 
Run Code Online (Sandbox Code Playgroud)

android oncreate android-lifecycle onpause

4
推荐指数
1
解决办法
5913
查看次数

为什么我的onCreateView方法被调用两次?

在调试另一个问题时,我意识到我onCreateView的一个活动的方法被调用了两次.我是编程的新手,我不完全理解android活动加载时如何调用这些方法,但对我来说它似乎不会被调用两次.消除了我的大部分代码,我仍然会看到我的System.out消息两次.

public class AddCourse extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_course);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new AddCourseFragment()).commit();
        }
    }

    public static class AddCourseFragment extends Fragment {

        View rootView;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
            rootView = inflater.inflate(R.layout.fragment_add_course,
                container, false);
                        System.out.println("I see this TWICE!!!!");
            return rootView;
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

这几乎与我的主要活动实现完全一样,但是那个没有经过onCreateView两次.思考?

我的activity_add_course xml被请求了......

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:orientation="horizontal"
android:layout_width="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android oncreate android-activity

4
推荐指数
1
解决办法
1万
查看次数

Android标签片段未调用OnCreateView从tab2切换到tab1

这是android studio在选择3选项卡式布局时自动生成的代码.问题是,当它开始在第一个选项卡,它会调用onCreateViewclass PlaceholderFragment.当我切换到第二个选项卡时,它再次为该选项卡调用它.现在问题从返回tab1开始,它不会调用onCreateView.现在,如果我转到tab3,它将被调用该选项卡,然后返回到tab1它现在被调用.因此,onCreateView如果我从tab2转到tab1但是从tab3调到tab1,那么tab1 永远不会被调用.我无法弄清楚为什么它不会仅仅在特定的序列中破坏这个视图.

我没有修改这个自动生成的代码,所以我认为它会正常工作.

public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {

SectionsPagerAdapter mSectionsPagerAdapter;

ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    });

    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {

        actionBar.addTab(
                actionBar.newTab()
                        .setText(mSectionsPagerAdapter.getPageTitle(i))
                        .setTabListener(this));
    }
}


@Override
public …
Run Code Online (Sandbox Code Playgroud)

tabs android fragment oncreate android-fragments

4
推荐指数
1
解决办法
2549
查看次数

android - ArrayAdapter没有默认构造函数

我正在制作适配器以使我的书籍集合在列表视图中可见.

KK

如果我添加super(context,position),问题就解决了:

    public BookAdapter(Context context, int position, List <Book> updatedBooksList) {
    super(context, position);
    this.context = context;
    this.booksList = updatedBooksList ;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道为什么我需要这个参数(int position)并调用超类构造函数?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)

另外,从广义上讲,为什么我们总是(?)需要在每个onCreate中调用super.onCreate?

我们不应该覆盖我们所有的活动生命周期阶段 - onPause,onREsume,onStop,OnDestroy,但我们仍然需要在每个阶段调用super?

android oncreate activity-lifecycle android-lifecycle onpause

4
推荐指数
1
解决办法
7552
查看次数

仅在第一个OnCreate上运行代码

我有一段代码,我只想在第一次调用特定的OnCreate()方法时运行(每个应用程序会话),而不是每次创建活动时.有没有办法在Android中执行此操作?

android oncreate android-lifecycle android-studio

4
推荐指数
2
解决办法
3454
查看次数

Android中的OpenGL onCreate片段视图

我已经创建了OpenGLRenderer.java类并在其中放置了一些代码,显示没有错误.然后我将此代码放在RoomFragment.java片段中创建一个视图:

public class RoomFragment extends Fragment {

/** Called when the fragment is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GLSurfaceView view = new GLSurfaceView(this);
    view.setRenderer(new OpenGLRenderer());
    setContentView(this);
}}
Run Code Online (Sandbox Code Playgroud)

但我得到了

构造函数GLSurfaceView(RoomFragment)未定义

对于RoomFragment类型,方法setContentView(RoomFragment)未定义

错误.这些方法不是在头文件中实现的吗?我猜这是因为这不是一个活动,而是一个仅在按钮点击前一个片段(在主活动菜单选择中处于活动状态)时才有效的片段.

我该怎么做?如何在片段层中创建GLSurfaceView?

android opengl-es oncreate android-fragments

3
推荐指数
1
解决办法
3667
查看次数

Android RatingBar onRatingChanged Listener

我在我的应用程序中使用了RatingBar元素,并尝试使用OnRatingChangedListener进行设置.在监听器中,我使用变量上的if语句来做不同的事情.问题是,出于某种原因,当我有多个选项时,这个监听器无法正常工作.它是在onCreate()方法中设置的,在if语句中的变量获取值之前,但我试图将它移动到其他位置而根本没有成功.

我的onCreate():

bar = (RatingBar) findViewById(R.id.serviceLevel);
    bar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {

        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating,
                boolean fromUser) {

        if(Code==null){
            Toast.makeText(TipCalculatorActivity.this, "Locationing error occured, please report to the developer.", Toast.LENGTH_LONG).show();
        }else if(Code=="1"){
            if(rating==0){
                autochange.setText("Precentage: 0%");
                precentage = 0;
                calculate(value, precentage);
            }else if(rating==0.5){
                autochange.setText("Precentage: 10%");
                precentage = 8;
                calculate(value, precentage);
            }else if(rating==1){
                autochange.setText("Precentage: 11%");
                precentage = 9;
                calculate(value, precentage);
            }else if(rating==1.5){
                autochange.setText("Precentage: 11%");
                precentage = 10;
                calculate(value, precentage);
            }else if(rating==2){
                autochange.setText("Precentage: 12%");
                precentage = 11;
                calculate(value, precentage);
            }else if(rating==2.5){
                autochange.setText("Precentage: 12%"); …
Run Code Online (Sandbox Code Playgroud)

variables android oncreate ratingbar

3
推荐指数
1
解决办法
8347
查看次数

哪一个被称为第一个静态块或oncreate方法?

我想知道哪个是第一个静态块或Oncreate方法

public class MainActivity extends Activity {
static{
// dosomething
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}
Run Code Online (Sandbox Code Playgroud)

android oncreate android-activity

3
推荐指数
1
解决办法
4575
查看次数