Android 片段未显示,即使在对其充气后也是如此
Android fragment is not displayed, even after inflating it
我声明我是应用程序开发的初学者,尤其是片段。
我正在 AndroidStudio 中开发一个应用程序项目;我正在尝试创建一个主页来显示一些信息,例如在线状态、收到的消息等等。
对于每个信息,我都尝试关联一个片段,但没有显示,即使代码中没有错误。
我用的是4.2版本,代码写在Java;我已经尝试了一切,但我已经完成了想法。
有什么建议么?我错过了什么吗?I was doing something like the image shown in this link.
我将post下面的代码:
这是 MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView buttonNV= findViewById(R.id.menu);
buttonNV.setOnNavigationItemSelectedListener(navListener);
getSupportFragmentManager().beginTransaction().add(R.id.online_frame,new OnlineStatusFragment()).commit();
}
online_fragment(我片段的布局):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="203dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="42dp"
android:layout_marginLeft="42dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="27dp"
android:layout_marginRight="27dp"
android:layout_marginBottom="277dp"
android:background="@drawable/border_tv"
android:text="SEI ONLINE/TESTING"
app:drawableRightCompat="@drawable/settings_icon" />
</RelativeLayout>
activity_main.xml:
<RelativeLayout 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"
tools:context=".MainActivity"
android:background="@color/background">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="55dp"
android:layout_alignParentLeft="true"
android:id="@+id/online_frame">
<fragment
android:id="@+id/online_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.progetto_lso_b.OnlineStatusFragment"
tools:layout="@layout/online_fragment" />
</FrameLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_menu"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
android:id="@+id/menu"/>
</RelativeLayout>
这是 OnlineStatusFragment.java:
public class OnlineStatusFragment extends Fragment {
public OnlineStatusFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate il layout per questo fragment
return inflater.inflate(R.layout.online_fragment, container, false);
}
}
我检查了你的代码,我认为那是因为你没有将 FrameLayout 添加到 Fragment。你能尝试在 online_fragment.xml:
中做到这一点吗
<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"
tools:context=".fragment.OnlineFragment">
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="203dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="42dp"
android:layout_marginLeft="42dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="27dp"
android:layout_marginRight="27dp"
android:layout_marginBottom="277dp"
android:background="@drawable/border_tv"
android:text="SEI ONLINE/TESTING"
app:drawableRightCompat="@drawable/settings_icon" />
</RelativeLayout>
</FrameLayout>
我发现我的代码哪里做错了。
我以错误的方式设置了 TextView 的宽度和高度;事实上,我必须分别用 match_parent
和 wrap_content
设置这些数据。
此外,我删除了文件 activity_main.xml 中的 <fragment>
(就像之前有人评论过的那样),因为它会“复制”该片段。
这是 online_fragment.xml 中的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".OnlineStatusFragment">
<TextView
android:id="@+id/online_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="1dp"
android:text="Sei online/sei offline"
android:drawableRight="@drawable/settings_icon"/>
</RelativeLayout>
这是 activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity"
android:background="@color/background">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="55dp"
android:layout_alignParentLeft="true"
android:id="@+id/online_frame">
</FrameLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_menu"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
android:id="@+id/menu"/>
</RelativeLayout>
感谢大家对我的帮助!
我声明我是应用程序开发的初学者,尤其是片段。
我正在 AndroidStudio 中开发一个应用程序项目;我正在尝试创建一个主页来显示一些信息,例如在线状态、收到的消息等等。
对于每个信息,我都尝试关联一个片段,但没有显示,即使代码中没有错误。
我用的是4.2版本,代码写在Java;我已经尝试了一切,但我已经完成了想法。
有什么建议么?我错过了什么吗?I was doing something like the image shown in this link.
我将post下面的代码:
这是 MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView buttonNV= findViewById(R.id.menu);
buttonNV.setOnNavigationItemSelectedListener(navListener);
getSupportFragmentManager().beginTransaction().add(R.id.online_frame,new OnlineStatusFragment()).commit();
}
online_fragment(我片段的布局):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="203dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="42dp"
android:layout_marginLeft="42dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="27dp"
android:layout_marginRight="27dp"
android:layout_marginBottom="277dp"
android:background="@drawable/border_tv"
android:text="SEI ONLINE/TESTING"
app:drawableRightCompat="@drawable/settings_icon" />
</RelativeLayout>
activity_main.xml:
<RelativeLayout 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"
tools:context=".MainActivity"
android:background="@color/background">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="55dp"
android:layout_alignParentLeft="true"
android:id="@+id/online_frame">
<fragment
android:id="@+id/online_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.progetto_lso_b.OnlineStatusFragment"
tools:layout="@layout/online_fragment" />
</FrameLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_menu"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
android:id="@+id/menu"/>
</RelativeLayout>
这是 OnlineStatusFragment.java:
public class OnlineStatusFragment extends Fragment {
public OnlineStatusFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate il layout per questo fragment
return inflater.inflate(R.layout.online_fragment, container, false);
}
}
我检查了你的代码,我认为那是因为你没有将 FrameLayout 添加到 Fragment。你能尝试在 online_fragment.xml:
中做到这一点吗 <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"
tools:context=".fragment.OnlineFragment">
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="203dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="42dp"
android:layout_marginLeft="42dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="27dp"
android:layout_marginRight="27dp"
android:layout_marginBottom="277dp"
android:background="@drawable/border_tv"
android:text="SEI ONLINE/TESTING"
app:drawableRightCompat="@drawable/settings_icon" />
</RelativeLayout>
</FrameLayout>
我发现我的代码哪里做错了。
我以错误的方式设置了 TextView 的宽度和高度;事实上,我必须分别用 match_parent
和 wrap_content
设置这些数据。
此外,我删除了文件 activity_main.xml 中的 <fragment>
(就像之前有人评论过的那样),因为它会“复制”该片段。
这是 online_fragment.xml 中的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".OnlineStatusFragment">
<TextView
android:id="@+id/online_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="1dp"
android:text="Sei online/sei offline"
android:drawableRight="@drawable/settings_icon"/>
</RelativeLayout>
这是 activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity"
android:background="@color/background">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="55dp"
android:layout_alignParentLeft="true"
android:id="@+id/online_frame">
</FrameLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_menu"
android:layout_alignParentBottom="true"
android:background="?android:attr/windowBackground"
android:id="@+id/menu"/>
</RelativeLayout>
感谢大家对我的帮助!