当前位置: 首页 > 知识库问答 >
问题:

无法在单击按钮时替换片段

冷涵忍
2023-03-14

我正在尝试学习如何在android中实现片段。因此,我在activity_main中创建了两个按钮和一个片段。xml。如果我点击第一个按钮,片段1应该充气,同样,如果我点击第二个按钮,片段2应该充气。

但是问题是它没有替换片段。当我调试代码时,在View.class中执行clecle()方法返回false。

LogCat中也没有错误。

我无法找出代码的问题。

这里是主要活动。xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/fragment1" />

<Button
    android:id="@+id/button2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/fragment2" />

<fragment
    android:id="@+id/fragment_place"
    android:name="com.example.myfragmentwithbuttonapp.FragmentTwo"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

这是fragment_one.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:orientation="vertical"
android:background="#00ffff">

   <TextView
       android:id="@+id/textView1"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:layout_weight="1"
       android:text="@string/thisisfragment1"
       android:textStyle="bold" />

</LinearLayout>

这是fragment_two.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:orientation="vertical"
android:background="#ffff00">

   <TextView
       android:id="@+id/textView2"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:text="@string/thisisfragment2"
       android:textStyle="bold" />

</LinearLayout>

这是一个碎片。JAVA

package com.example.myfragmentwithbuttonapp;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentOne extends Fragment {
  @Override
  public View onCreateView(LayoutInflater inflater,
     ViewGroup container, Bundle savedInstanceState) {

     //Inflate the layout for this fragment

     return inflater.inflate(
          R.layout.fragment_one, container, false);
  }
}

这是两个片段。JAVA

package com.example.myfragmentwithbuttonapp;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


public class FragmentTwo extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater,
       ViewGroup container, Bundle savedInstanceState) {

       // Inflate the layout for this fragment

       return inflater.inflate(
          R.layout.fragment_two, container, false);
   }
}

以下是主要活动。JAVA

package com.example.myfragmentwithbuttonapp;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    Fragment fr;
    FragmentManager fm;
    FragmentTransaction fragmentTransaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        Button button1 = (Button) findViewById(R.id.button1);
        Button button2 = (Button) findViewById(R.id.button2);

        button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                fr = new FragmentOne();

                fm = getFragmentManager();
                fragmentTransaction = fm.beginTransaction();
                fragmentTransaction.replace(R.id.fragment_place, fr);
                fragmentTransaction.commit();

            }
        });

        button2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                fr = new FragmentTwo();

                fm = getFragmentManager();
                fragmentTransaction = fm.beginTransaction();
                fragmentTransaction.replace(R.id.fragment_place, fr);
                fragmentTransaction.commit();

            }
        });
    }

}

我希望我已经能够解释这个问题。

感谢任何帮助。

谢谢

共有1个答案

苏高峰
2023-03-14

用于零碎交易。replace()您需要为片段和片段本身指定一个容器。容器是将保存片段的父视图。典型的框架布局。

现在,您正在传递R.id.fragment_place作为容器,但该id指的是片段,而不是片段容器。

在活动区。xml,替换:

<fragment
android:id="@+id/fragment_place"
android:name="com.example.myfragmentwithbuttonapp.FragmentTwo"
android:layout_width="match_parent"
android:layout_height="match_parent" />

与:

<FrameLayout
    android:id="@+id/fragment_place"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

这样很好用。剩下的代码就可以了。

 类似资料:
  • 我正在尝试通过xpath,css,ID...但什么都管用。 我总是得到错误:没有这样的元素:无法定位元素 我添加了一个明确的等待,但它仍然不起作用。 你能帮帮我吗? 单选按钮

  • 我试图用硒点击“下一页”按钮,但没有成功。我使用了正确的CSS选择器还是应该把它换成别的东西?

  • 我正在尝试使用Java Selenium Web驱动程序单击弹出窗口中的“保存”按钮,但是它会引发异常 消息:元素当前不可见,因此可能不会与命令持续时间交互 我可以看到“保存”按钮在我的弹出窗口中处于活动状态。我不知道它抛出异常的原因。 我正在尝试单击的“保存”按钮的 HTML 代码, firepath:html/body/div[6]/div/div/div/dir[2]/div/div//bu

  • 问题内容: HTML代码: 使用类名,我试图单击按钮,但无法单击。 我尝试了以下代码: 问题答案: 您可以尝试通过获取它。据我所记得,这只是一堂课。

  • 问题内容: 我正在使用Java学习Selenium Webdriver。作为一个学习示例,我尝试打开MakeMyTrip,访问“ 国际航班”页面,然后单击Google Chrome中的“ 单向” 单选按钮。我尝试了其他方法来定位此单选按钮,但仍无法正常工作。请在我的代码示例下面找到。 谁能帮我解决这个问题? 问题答案: 使用以下代码:- 享受..如果仍然遇到任何问题,请与我联系:)