真的需要一些建议,不知道这里有什么问题。
上下文: 带有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;
}
}
答案 0 :(得分:3)
有两种方法可以将片段添加到活动布局中:
在活动的布局文件中声明片段。
以编程方式将片段添加到现有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
中,您会扩展片段布局并使用视图对象初始化该布局的视图。但是你膨胀activity_main.xml
这不是必需的。
引用文档
具体来说,片段可以访问Activity实例 getActivity()并轻松执行诸如查找视图之类的任务 活动布局
因此,对于EditText
,您可以使用
EditText easy = (EditText)getActivity().findViewById(R.id.easy);
在EditText
Activity
上初始化Button
点击EditText
,然后您可以从EditText
传递Activity
的值} Fragment
答案 1 :(得分:0)
告诉我onclick方法,容器你有一个片段......它是两件事之一,
要么以编程方式添加已存在的视图,要么尝试在没有处理程序的情况下更新ui ....处理程序可以在片段中解决,所以我假设它是第一个....