我创建了一个包含带有“容器”ID的FrameLayout的Activity,虽然我不能引用这个视图,但我已经在一个简单的引用中对它进行了测试:
活动布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="app.chrono.name.LoginActivity">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</FrameLayout>
的活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
FragmentManager fragmentManager = activity.getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(current);
fragmentTransaction.add(R.id.container, new LoginFragment()); //container is written in red
}
我不明白为什么不能提到这个容器。它应该是可访问的。它用红色写成,似乎不存在。
答案 0 :(得分:1)
你的代码是对的, 点击你的代码findviewbyid下方的一行,按一个建议按alt +输入所有。 还尝试使缓存无效并重新启动: 转到文件并使缓存无效并重新启动。
答案 1 :(得分:0)
Container是一个视图,但具体来说它是一个布局视图,即FrameLayout。
因此,请将类型更改为FrameLayout而不是View。
FrameLayout container = (FrameLayout)findViewById(R.id.container);
修改强> 此外,如果您发现第一个解决方案不起作用,请直接在片段转换中添加ID。
fragmentTransaction.add(R.id.container, new LoginFragment());
答案 2 :(得分:0)
您应该commit();
您的片段交易。
FragmentManager fragmentManager = activity.getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(current);
fragmentTransaction.add(R.id.container, new LoginFragment());
fragmentTransaction.commit();
答案 3 :(得分:0)
首先从代码中删除此行
container = findViewById(R.id.container);
使用此功能打开片段
public void loadFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(current);
fragmentTransaction.add(R.id.container, new LoginFragment());
}
并像这样打电话给onCreate
loadFragment(new LoginFragment());
并确保导入这些
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;