Android 活动顶部的片段
我有一个主要的活动和一些元素。其中一个是按钮。我想在单击按钮时加载一个片段。我希望片段涵盖整个活动,而不仅仅是在布局中。然后在片段中还有一个按钮,它必须加载另一个片段,覆盖所有内容,然后加载另一个片段,以此类推 所以我在活动上设置了一个OnClickListener来加载第一个片段。活动负载刚刚好。如果我点击其他活动的按钮,一切都很好。但无论我尝试了什么,当我点击应该加载片段的按钮时,它总是崩溃 以下是主要活动的代码:Android 活动顶部的片段,android,android-fragments,Android,Android Fragments,我有一个主要的活动和一些元素。其中一个是按钮。我想在单击按钮时加载一个片段。我希望片段涵盖整个活动,而不仅仅是在布局中。然后在片段中还有一个按钮,它必须加载另一个片段,覆盖所有内容,然后加载另一个片段,以此类推 所以我在活动上设置了一个OnClickListener来加载第一个片段。活动负载刚刚好。如果我点击其他活动的按钮,一切都很好。但无论我尝试了什么,当我点击应该加载片段的按钮时,它总是崩溃 以下是主要活动的代码: public class SignUpActivity extends Ap
public class SignUpActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
Button next = (Button) findViewById(R.id.button_next_name);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
SignNameFragment nameFragment = new SignNameFragment();
fragmentTransaction.add(PROBABLY_WHAT_I_AM_DOING_WRONG,nameFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
}
}
所有的xml几乎都是一样的。活动的RelativeLayout、片段的FrameLayout以及所有片段的ScrollView、ImageView、EditText、TextView和按钮
到目前为止,我根据网络上的建议尝试了以下内容:
- 主活动的xml使用RelativeLayout。我试图把碎片装进去,但失败了
- 我把它改成了框架布局
- 我使用了fragmentTransaction.add(R.id.fragment\u容器,nameFragment)
- 我没有使用add(),而是尝试替换(R.id.activity\u sign\u up,nameFragment)
- 扩展到碎片活动
- 在我的主要活动的xml中将FrameLayout设置为片段容器
您应该使用activity_sign_up.xml中的FrameLayout和replace FragmentManager方法将一个片段替换为另一个片段
fragmentManager.beginTransaction().replace(R.layout.activity_sign_up, nameFragment).commit();
我将像这样使用您的代码:
public class SignUpActivity extends AppCompatActivity {
private FragmentManager fragmentManager;
private Fragment switchFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
fragmentManager = getSupportFragmentManager();
switchFragment nameFragment = new SignNameFragment();
fragmentManager.beginTransaction()
.add(R.layout.activity_sign_up, switchFragment)
.commit();
}
public void cambiarFragment(){
switchFragment = new anyTypeFragment();
fragmentManager.beginTransaction()
.replace(R.layout.activity_sign_up, switchFragment)
.commit();
}
}
public class SignUpActivity extends AppCompatActivity implements SignNameFragment.OnFragmentInteractionListener {
//implement the interface methods here
}
以及nameFragment类:
public class nameFragment extends Fragment {
private Button next;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Inicializar Modelo
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.nameFragment_fragment_layout,container,false); ///Cargar XML, Vista Padre, Si quiero dejarlo siempre
next=(Button)v.findViewById(R.id.btn_crear_grupo);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((SignUpActivity) getActivity()).cambiarFragment();
}
}
});
return v;
}
}
你可以在那里创建任何你想要的片段类。你的错误说明了一切,你没有
实现接口
您的SignUpActivity
需要实现接口OnFragmentInteractionListener
,然后您必须重写其方法
应该是这样的:
public class SignUpActivity extends AppCompatActivity {
private FragmentManager fragmentManager;
private Fragment switchFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
fragmentManager = getSupportFragmentManager();
switchFragment nameFragment = new SignNameFragment();
fragmentManager.beginTransaction()
.add(R.layout.activity_sign_up, switchFragment)
.commit();
}
public void cambiarFragment(){
switchFragment = new anyTypeFragment();
fragmentManager.beginTransaction()
.replace(R.layout.activity_sign_up, switchFragment)
.commit();
}
}
public class SignUpActivity extends AppCompatActivity implements SignNameFragment.OnFragmentInteractionListener {
//implement the interface methods here
}
为什么不发布错误?如果您不需要OnFragmentInteractionListener,则可以将其完全删除。但是替换不需要id类型吗?replace(int,Fragment)也尝试了您的解决方案,但对我的情况没有帮助。谢谢你的帮助,就这样。我想我检查的所有示例都比较旧,没有使用OnFragmentInteractionListener。奇怪的是,我实际上没有在任何地方使用它,但没有它,应用程序就会崩溃。如果它对你有帮助,你可以将它标记为已接受。如果你不使用该界面,你可以随时删除它,以后可能需要它来传输数据。但我不明白,如果它没有被使用,为什么我必须实现它。