【问题标题】:activity crashes when switching fragment切换片段时活动崩溃
【发布时间】:2014-01-27 14:26:21
【问题描述】:

我有一个带有列表视图和按钮的活动,当单击按钮时,我添加了一个片段。我的问题是,当我在片段中滚动然后关闭片段时,活动中的列表视图也会滚动,当我单击按钮将片段带回应用程序崩溃时。有什么帮助吗?

主要活动代码

     public class MainActivity extends Activity implements OnClickListener  {
 ListView listView ;
 Button B;
 FragmentTransaction fragmentTransaction;
 FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
      fragmentManager = getFragmentManager();
     fragmentTransaction = fragmentManager.beginTransaction();
     listView = (ListView) findViewById(R.id.list);

     // Defined Array values to show in ListView
      String[] values = new String[] { "1", 
                                      "2",
                                      "3",
                                      "4", 
                                      "5", 
                                      "6", 
                                      "7", 
                                      "8",
                                      "9",
                                      "10",
                                      "11",
                                      "12",
                                      "13",
                                      "14",
                                      "15",
                                      "16",
                                      "17",
                                      "18",
                                      "19",
                                      "20",
                                      "21",
                                      "22",
                                      "23"



                                     };
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
             android.R.layout.simple_list_item_1, android.R.id.text1, values);


           // Assign adapter to ListView
           listView.setAdapter(adapter); 
    B=(Button)findViewById(R.id.button1);
    B.setOnClickListener(this);
}

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub


    switch(v.getId())
    {
         case R.id.button1:
             Second s = new Second();

             fragmentTransaction.add(android.R.id.content, s);

              fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
             fragmentTransaction.addToBackStack("Cam");
             fragmentTransaction.commit();
         break;





    }


   }

   }

【问题讨论】:

  • 请添加崩溃日志
  • 显示你的堆栈跟踪。
  • 致命异常:主进程:com.example.fragmenttransisition,PID:8193 java.lang.IllegalStateException:已在 android.app.BackStackRecord.commitInternal(BackStackRecord.java:583) 调用了提交。 app.BackStackRecord.commit(BackStackRecord.java:575) 在 com.example.fragmenttransisition.MainActivity.onClick(MainActivity.java:82) 在 android.view.View.performClick(View.java:4438)

标签: android android-listview android-fragments


【解决方案1】:

试试这个::

onCreate(...){...} 方法中删除第一个fragmentManager = getFragmentManager(); fragmentTransaction = fragmentManager.beginTransaction();

并将此代码放在该案例上,即,

    @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub


    switch(v.getId())
    {
         case R.id.button1:
             Second s = new Second();
             fragmentManager = getFragmentManager();
             fragmentTransaction = fragmentManager.beginTransaction();
             fragmentTransaction.add(android.R.id.content, s);

              fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
             fragmentTransaction.addToBackStack("Cam");
             fragmentTransaction.commit();
         break;
    }

   }

【讨论】:

    【解决方案2】:

    将此添加到以下内容:

     switch(v.getId())
        {
             case R.id.button1:
                 Second s = new Second();
                 //add this
                 fragmentTransaction = fragmentManager.beginTransaction();  
                 fragmentTransaction.replace(android.R.id.content, s);
                 fragmentTransaction.addToBackStack(null);
                 fragmentTransaction.commit();
             break;
    
        }
    

    【讨论】:

    • 感谢您修复了崩溃问题,但我如何阻止主要活动中的列表视图被滚动?
    • 对不起,我没有把你带到那里。为什么需要停止滚动列表视图?
    • 当我单击按钮时,片段会打开并用其视图覆盖屏幕,但是如果我在片段中滚动并关闭片段,则列表视图也会滚动
    • 签出编辑? @user3208040 让我知道这是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多