当前位置: 首页 > 面试题库 >

片段中间(I):从edittext获取输入,在片段的textview中设置文本

陶柏
2023-03-14
问题内容

确实需要一些建议,不知道这里出了什么问题。

上下文:2个片段,每个片段都有一个Textview,主要活动有2个按钮和一个edittext

目的:在主活动的edittext框中键入hello,然后单击片段1的按钮,textview将变为hello。

问题:

在edittext中输入hello并单击按钮1时,会遇到运行时错误。

Logcat:

E/AndroidRuntime(1291): FATAL EXCEPTION: main
E/AndroidRuntime(1291): android.view.InflateException: Binary XML file line #29: Error inflating class fragment
E/AndroidRuntime(1291): android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
E/AndroidRuntime(1291):android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
E/AndroidRuntime(1291):android.view.LayoutInflater.inflate(LayoutInflater.java:489)
E/AndroidRuntime(1291): android.view.LayoutInflater.inflate(LayoutInflater.java:396)
E/AndroidRuntime(1291): com.example.FragmentOne.onCreateView(FragmentOne.java:19)
E/AndroidRuntime(1291):android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829)

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="match_parent"
       android:layout_weight="1"
       android:text="This is fragment No.1"
       android:textStyle="bold" />
 </LinearLayout>

activity_main.xml

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/easy"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10" >

            <requestFocus />
        </EditText>

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="selectFrag"
            android:text="Fragment No 1" />

        <Button
            android:id="@+id/button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="selectFrag"
            android:text="Fragment No 2" />

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

    </LinearLayout>

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void selectFrag(View view) {
        Fragment fr;    
        if(view == findViewById(R.id.button2)) {
            fr = new FragmentTwo();

        }else {
            fr = new FragmentOne();
        }
        FragmentManager fm = getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_place, fr);
        fragmentTransaction.commit();

   }

}

FragmentOne.java

public class FragmentOne extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) 
    {
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        TextView monthlypayment=  (TextView) view.findViewById(R.id.textView1);
        EditText easy = (EditText) inflater.inflate(R.layout.activity_main, container, false).findViewById(R.id.easy);
        monthlypayment.setText(easy.getText().toString());

        return view;
    }
}

问题答案:

您可以通过两种方式将片段添加到活动布局:

  1. 在活动的布局文件中声明该片段。

  2. 以编程方式将片段添加到现有的ViewGroup。

两种方法都在文档中提到

http://developer.android.com/guide/components/fragments.html

如果要将片段添加到容器中,则需要在xml中使用ViewGroup。一般FrameLayout使用。所以在xml中有以下内容

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

活动代码很好。在“按钮”上单击,可以替换容器中的相应片段。

在您的片段中onCreateView,为片段布局充气,并使用view对象初始化该布局的视图。但是您会膨胀activity_main.xml,这不是必需的。

报价文件

具体来说,该片段可以使用getActivity()访问Activity实例,并轻松执行诸如在活动布局中查找视图之类的任务

所以EditText你可以使用

EditText easy = (EditText)getActivity().findViewById(R.id.easy);

或者单击进行初始化EditTextActivityButton获取值EditText,然后可以EditText将从的值传递ActivityFragment



 类似资料:
  • 如您所见,当按下按钮时,main activity运行“GetFromuser”函数。我想在该函数中获取edittext值。我该怎么做呢?

  • 我正在尝试创建searchdate。我在这里做的是 下面是 所以首先,我打开,它是一个片段。然后单击(编辑文本)后,它将显示(DatePickerFragment)。显示没有问题,也没有错误。 我的问题是,我怎么能设置值后,我选择日期从我的?

  • 我所做的是创建了两个按钮,当按下一个按钮时,就会启动一个意图,片段中的区域设置也会改变。我通过获取所需的区域设置值来实现这一点,将其转换为字符串并将其放入额外的值中。它在活动之间工作得很好,但当我将其设置为片段时,它给了我一个错误 这是我的代码。 发送额外信息的活动: 接收区域设置的片段: 这给了我这行的错误。 我还尝试做了很多事情,比如将接收代码放在另一个地方,将其放在管理片段的活动中,但没有奏

  • 我该怎么做?现在我得到一个:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法'void Android.Widget.TextView.SetText(java.lang.CharSequence)' FragmentRonde1.java 下面是片段的类,其中ListCLickedTitle为:ListClickedFragment logcat

  • 我做错了什么? 这是我的XML文件。课文是德语的,我希望你能理解一切。否则请问我。

  • 我有一个,它创建一个,然后这个创建另一个: 这让我想到。是否真的可以删除并转到? 提前感谢您的时间,我在网上找不到任何合适的信息!