我有两个单独的按钮,点击后会显示单独的片段。 这是我的xml文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.sjha.myapplication.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fragment_one"
android:text="Fragment1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fragment_two"
android:text="Fragment2"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment
android:name="layout.FragmentOne"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment">
</fragment>
</LinearLayout>
</LinearLayout>
我迷失在android.app.Fragment
和layout.Fragment
之间。请帮我解决这个问题。
这是我的java文件。
package com.example.sjha.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.View;
import layout.FragmentOne;
import layout.FragmentTwo;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void changeFragment(View v)
{
Fragment fragment;
if (v==findViewById(R.id.fragment_one))
{
//HERE IS THE ERROR..
//I AM LOST BETWEEN android.app.Fragment and layout.Fragment
//FragmentTwo() is layout.Fragment while fragment is android.app.Fragment
fragment= new FragmentTwo();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment, fragment);
ft.commit();
}
}
}
我该如何解决这个问题?
答案 0 :(得分:0)
存在不匹配。单击按钮时,您无法在布局中查找Fragment
,因为它们可能尚未添加。更好的方法是检查按钮ID。
重建对onClick
事件按钮作出反应的方法,并根据Button id选择fragmment:
public void onClick(View view) {
Fragment fragment = new FragmentOne();
switch (view.getId) {
case R.id.fragment_one:
break;
case R.id.fragment_one:
fragment = new FragmentTwo();
break;
}
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment, fragment);
ft.commit();
}
答案 1 :(得分:0)
当您以静态方式(在布局中)定义片段时,您无法使用片段事务替换/删除它。
如果要在片段之间交换,请使用动态方式,您必须使用片段的持有者,使用FrameLayout,然后您可以使用fragmentTransaction
来替换片段。
您可以在这些链接中获得更多信息和代码示例:
https://developer.android.com/guide/components/fragments.html
http://coreylatislaw.com/managing-static-and-dynamic-fragments/