无法找到ID

时间:2017-10-23 12:53:25

标签: android layout

我创建了一个包含带有“容器”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
}

我不明白为什么不能提到这个容器。它应该是可访问的。它用红色写成,似乎不存在。

4 个答案:

答案 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;