我真的是android studio的新手,并且遇到了一个非常基本的问题。 我已经看到了有关该问题的一些线索,但没有一个真正能确切解决我的问题。
问题: 如何更改NavigationDrawer模板中的片段?该模板提供了一个环境,在该环境中应将所谓的content_main.xml更改为另一个片段。我不知道该怎么做
我尝试过的操作:由于无法更改content_main.xml,我更改了整个xml,其中包括content_main.xml。如果您只看一下我的代码,就更容易理解了。
模板 app_bar_main.xml ,用于设置片段的外观,并包含 content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/content_main_frame"
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"
tools:showIn="@layout/app_bar_main"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</FrameLayout>
在导航抽屉main_activity中,我如下更改片段:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Fragment newFragment;
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (id == ..) {
} else if (id == R.id.nav_emergencies) {
transaction.replace(R.id.content_main_frame, new Drawer_Emergencies());
transaction.addToBackStack(null);
transaction.commit();
}}
您可能会看到该事务替换了整个app_bar_main,但我认为我应该只更改app_bar_main.xml中包含的content_main.xml。我该如何强调呢?
当我执行裘德的建议时,我得到了更新的结果。片段在正确的位置,但是仍然以某种方式显示content_main_frame.xml
(hello world)。
答案 0 :(得分:1)
也许您应该尝试在INSERT INTO table2 (SEQ_ID, REQ_ID,call_id,summary,count)
SELECT min(seq_id) seq_id
, req_id
, call_id
, S1_vs_S2
,((SELECT sum(c2) FROM TABLE_STG_CTRL WHERE source='S1')-
SELECT sum(c2) FROM TABLE_STG_CTRL WHERE source='S2'))
FROM table1
GROUP BY req_ID, Ctrl_ID, c1, source
ORDER BY SEQ_ID ;
xml文件中创建一个framelayout
。
然后将新片段加载到framelayout中。这就像为新片段创建框架一样。
然后像这样加载它:
content_main
答案 1 :(得分:0)
您可以执行以下操作:
content_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/content_frame">
</FrameLayout>
然后
transaction.replace(R.id.content_frame, new Drawer_Emergencies());
答案 2 :(得分:0)
在与Mike.M的讨论中,我能够解决我的问题,而他提供了方法。为了使该线程可关闭,我想在此发布解决方案,引用Mike.M:
如果要用FragmentTransaction替换某些视图,则这些视图应该位于自己的Fragment中,您可以在启动时将其加载到Activity的onCreate()中。只要您为所有这些传递相同的R.id,您随后的replace()事务将按预期工作。也就是说,前提是您要将它们交换出同一ViewGroup。 (顺便说一句,如果您想ping我,请在我的用户名前面加上@。如果有多个其他用户在评论中,除非您直接将其发送给用户,否则我们不会收到通知。)
这将产生以下分步解决方案: