ANDROID STUDIO 无法访问 fragment_main.xml 中的对象
Posted
技术标签:
【中文标题】ANDROID STUDIO 无法访问 fragment_main.xml 中的对象【英文标题】:ANDROID STUDIO Can't access objects in fragment_main.xml 【发布时间】:2014-03-11 14:10:06 【问题描述】:我有一个简单的 Android 应用程序。布局文件夹显示一个activity_main.xml 文件和一个fragment_main.xml 文件。在那个 fragment.xml 文件中,我放置了一个名为 buttonTest 的按钮。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
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.snapvest.thunderbird.app.MainActivity$PlaceholderFragment">
<LinearLayout
android:orientation="vertical"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">
<Button
android:layout_
android:layout_
android:text="TEST"
android:id="@+id/buttonTest"
android:layout_gravity="center_horizontal" />
</LinearLayout>
在 MainActivity.java 文件中,我试图访问该 buttonTest。
public class MainActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null)
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
// Get access to the buttons
final Button buttonTest = (Button)findViewById(R.id.buttonTest);
它编译得很好。但是当我运行它时, buttonTest 变量会以空指针的形式返回。 为什么找不到 buttonTest 对象?
【问题讨论】:
【参考方案1】:你可以这样使用。
final Button buttonAvailableOptions = getActivity().findViewById(R.id.buttonAvailableOptions);
【讨论】:
【参考方案2】:我想我找到了解决方案。 MainActivity.java 设置activity_main.xml,然后使用fragment_main.xml 作为其(最初)单一的主要片段。这就是为什么我们实际上应该将所有的活动 UI 主要放在 fragment_main.xml 中(实际上将 NOTHING 放在 activity_main.xml 中)。
在 MainActivity.java 的底部附近有一个部分用于初始化 fragment_main.xml。正是在那里,我需要访问片段的 UI 的按钮和其他对象。如:
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment
public PlaceholderFragment()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
// Get access to the buttons
final Button buttonAvailableOptions = (Button)rootView.findViewById(R.id.buttonAvailableOptions);
return rootView;
上面的大部分内容都是由 Android Studio 自动添加的。以“获取按钮的访问权限”开头的部分是我的,您可以在其中设置对按钮和其他 UI 对象的任何访问或处理。
【讨论】:
我在这里找到了答案:***.com/questions/23653778/…【参考方案3】:findViewById()
找不到按钮的原因是因为setContentView()
素数findViewById()
只查看您提供给setContentView()
的layout.xml
文件,而您的按钮不在R.layout.activity_main
.如果您的按钮位于Fragment
(它似乎是)中,那么您应该从Fragment
而非Activity
访问和操作它。这确保您的Activity
和Fragment
逻辑保持解耦,允许您将Fragment
与不同的Activities
重复使用。
【讨论】:
activity_main.xml 和 fragment_main.xml 都位于布局文件夹中。当我最初启动 Android Studio 并将其添加为新应用程序时,它会自动创建活动和片段 xml 文件,它甚至会突出显示(自动选择)fragment_main.xml 以进行初始编辑。这对我说,我的布局确实应该驻留在 fragment_main.xml 中(而不是在 activity_main.xml 中)。至于我应该尝试从哪里访问按钮,有一个 MainActivity.java 文件,但没有明确对应于片段。事实上,MainActivity.java 是唯一的 java 文件。 如果我改变 setContentView(R.layout.activity_main);设置内容视图(R.layout.fragment_main); [IE。到片段]然后我确实可以访问按钮并获得指向它的非空指针。但随后应用报告“不幸的是,SnapVest 已停止工作”。以上是关于ANDROID STUDIO 无法访问 fragment_main.xml 中的对象的主要内容,如果未能解决你的问题,请参考以下文章
无法在android studio中的android模拟器中访问互联网
Visual Studio Xamarin Android System.Net.WebException:错误:ConnectFailure(网络无法访问)
ANDROID STUDIO 无法访问 fragment_main.xml 中的对象
Android Studio/gradle 错误消息:无法访问 javax.naming.referenceable 中的可引用