【发布时间】:2015-03-28 03:45:43
【问题描述】:
解决了!感谢大家的帮助。
我在将片段作为一个概念而苦苦挣扎,尤其是似乎停留在这一件事上。我想要做的是,使用我的片段,操纵它自己的布局数据。每次我尝试从 Fragment 中访问 ImageButton 时,它都会使应用程序崩溃。从活动中可以正常工作。我只是从根本上误解了 Fragments 吗?
代码(缩小尺寸)-
这是调用我的片段的活动的开始:
Display.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragmentClass MyFragment = new MyFragmentClass();
fragmentTransaction.add(R.id.fragment_container, MyFragment);
fragmentTransaction.commit();
该活动的 XML:
activity_display.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.mycompanyname.myprojectname.Display"
android:id="@+id/display_layout">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container">
</FrameLayout>
</RelativeLayout>
片段
MyFragmentClass.java
public class MyFragmentClass extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_layout_screen, container, false);;
}
public void MethodTest()
{
}
}
片段的 XML 文件:
fragment_layout_screen.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_layout_screen"
tools:context="com.mycompanyname.myprojectname.MyFragmentClass">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/my_button"
android:clickable="true"
android:onClick="buttonPress"
android:src="@drawable/button"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
基本上,我最初在 Display.java 中拥有所有这些,但想添加片段,所以我试图将内容移出并移入片段,但我仍然需要操作 xml 信息的能力,我只是可以'吨。
从 Display.java 活动内部,我可以像这样轻松调用 ImageButton:
ImageButton myButton = (ImageButton) findViewById(R.id.my_button)
但如果我从片段中的 MethodTest 执行相同操作,则应用程序崩溃。
我在这里搜索了很多建议,尝试了各种解决方案:findViewById in Fragment,但这些似乎都不起作用。
我一直在阅读此设置:http://developer.android.com/guide/components/fragments.html,但似乎找不到我做错了什么。
我们将不胜感激,如果您对我的设置有任何疑问,请提出。
【问题讨论】:
-
getView().findViewById(R.id.my_button)在 Fragment 中工作吗? -
这会在从 MethodTest() 调用应用程序时立即崩溃
标签: java android xml android-fragments