Rog*_*ett 2 android button null-pointer
我有一个简单的Android应用程序.layout文件夹显示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_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.snapvest.thunderbird.app.MainActivity$PlaceholderFragment">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TEST"
android:id="@+id/buttonTest"
android:layout_gravity="center_horizontal" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在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);
}
Run Code Online (Sandbox Code Playgroud)
它编译得很好.但是当我运行它时,buttonTest变量返回为空指针.为什么找不到buttonTest对象?
我想我找到了解决方案.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;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的大部分内容都是由Android Studio自动添加的.以"访问按钮"开头的部分是我的,您可以在其中设置对按钮和其他UI对象的任何访问或处理.