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

时间:2014-03-26 16:59:36

标签: java android android-fragments android-edittext textview

真的需要一些建议,不知道这里有什么问题。

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

目的: 在主活动中输入hello到edittext框中 单击片段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;
    }
}

2 个答案:

答案 0 :(得分:3)

有两种方法可以将片段添加到活动布局中:

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

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

  3. 文档中提到了这两种方法

    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中,您会扩展片段布局并使用视图对象初始化该布局的视图。但是你膨胀activity_main.xml这不是必需的。

    引用文档

      

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

    因此,对于EditText,您可以使用

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

    EditText Activity上初始化Button点击EditText,然后您可以从EditText传递Activity的值} Fragment

    Send data from activity to fragment in android

答案 1 :(得分:0)

告诉我onclick方法,容器你有一个片段......它是两件事之一,

要么以编程方式添加已存在的视图,要么尝试在没有处理程序的情况下更新ui ....处理程序可以在片段中解决,所以我假设它是第一个....