Android 在运行时多次添加同一片段

Android 在运行时多次添加同一片段,android,android-fragments,Android,Android Fragments,我正在设计一个报警应用程序 我正在使用一个片段作为我的警报,想法是在每个新警报中使用相同的片段(我不知道这是否是正确的方法) 那么,我基本上是想通过按下“新建报警”按钮,将相同的片段再次添加到活动的布局中,但当我按下按钮时,应用程序崩溃。有什么帮助吗 我正在将片段插入到RelativeLayout内部的ScrollView中的LinearLayout中 package com.example.roo.proyi; import android.app.Fragment; import and

我正在设计一个报警应用程序

我正在使用一个片段作为我的警报,想法是在每个新警报中使用相同的片段(我不知道这是否是正确的方法)

那么,我基本上是想通过按下“新建报警”按钮,将相同的片段再次添加到活动的布局中,但当我按下按钮时,应用程序崩溃。有什么帮助吗

我正在将片段插入到RelativeLayout内部的ScrollView中的LinearLayout中

package com.example.roo.proyi;

import android.app.Fragment;

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class alarms extends FragmentActivity {

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



        android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
        final android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        alarm_fragment alarmFragment = new alarm_fragment();
        fragmentTransaction.add(R.id.alarmListContainer,alarmFragment);
        fragmentTransaction.commit();

        Button button_newAlarm = (Button)findViewById(R.id.button_new_alarm);
        button_newAlarm.setOnClickListener(
                new Button.OnClickListener() {
                    public void onClick(View v) {
                        alarm_fragment alarmFragment2 = new alarm_fragment();
                        fragmentTransaction.add(R.id.alarmListContainer,alarmFragment2);
                        fragmentTransaction.commit();
                    }

                    ;
                }
        );

.
.
.
.
.
.CONTINUES BUT IT IS IRRELEVANT
.
.
.
通过创建不同的FRAGMENTTRANSACTION生成的最终解决方案

public class alarms extends FragmentActivity {

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



        final android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
        final android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        final alarm_fragment alarmFragment = new alarm_fragment();
        fragmentTransaction.add(R.id.alarmListContainer,alarmFragment);
        fragmentTransaction.commit();

        Button button_newAlarm = (Button)findViewById(R.id.button_new_alarm);
        button_newAlarm.setOnClickListener(
                new Button.OnClickListener() {
                    public void onClick(View v) {
                        android.support.v4.app.FragmentTransaction fragmentTransaction2 = fragmentManager.beginTransaction();
                        getSupportFragmentManager().beginTransaction();
                        alarm_fragment alarmFragment2 = new alarm_fragment();
                        fragmentTransaction2.add(R.id.alarmListContainer,alarmFragment2);
                        fragmentTransaction2.commit();
                    }

                    ;
                }
        );

不能使用相同的
FragmentTransaction
将片段添加到
OnClickListener
中。一旦对事务调用
commit()
,就不能再次使用它。调用
getSupportFragmentManager().beginTransaction()
获取新事务。

签出此代码-
一,。它检查您是否已经在堆栈中添加了对话框片段。如果是,它将删除片段并添加带有新
参数的新片段,如果它不存在,它仍将添加片段

看看是否可以将此方法合并到代码中-

    void showDialog() {
    mStackLevel++;

    // DialogFragment.show() will take care of adding the fragment
    // in a transaction.  We also want to remove any currently showing
    // dialog, so make our own transaction and take care of that here.
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    // Create and show the dialog.
    DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
    newFragment.show(ft, "dialog");
}

可能会使用
列表视图
并将报警添加到自定义适配器中。如果您发布了logcat@ColinGillespie你建议怎么做?我试过了,但它在oncreateGreat崩溃了,这很有效,作为对其他人的参考,我将发布修改后的代码(至少是为了尝试您的解决方案而修改的代码,我知道它不干净)