Android 在运行时多次添加同一片段
我正在设计一个报警应用程序 我正在使用一个片段作为我的警报,想法是在每个新警报中使用相同的片段(我不知道这是否是正确的方法) 那么,我基本上是想通过按下“新建报警”按钮,将相同的片段再次添加到活动的布局中,但当我按下按钮时,应用程序崩溃。有什么帮助吗 我正在将片段插入到RelativeLayout内部的ScrollView中的LinearLayout中Android 在运行时多次添加同一片段,android,android-fragments,Android,Android Fragments,我正在设计一个报警应用程序 我正在使用一个片段作为我的警报,想法是在每个新警报中使用相同的片段(我不知道这是否是正确的方法) 那么,我基本上是想通过按下“新建报警”按钮,将相同的片段再次添加到活动的布局中,但当我按下按钮时,应用程序崩溃。有什么帮助吗 我正在将片段插入到RelativeLayout内部的ScrollView中的LinearLayout中 package com.example.roo.proyi; import android.app.Fragment; import and
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崩溃了,这很有效,作为对其他人的参考,我将发布修改后的代码(至少是为了尝试您的解决方案而修改的代码,我知道它不干净)