Android:如何获取片段的视图 [英] Android: how to get the views of a Fragment

查看:21
本文介绍了Android:如何获取片段的视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一个班级中,我以编程方式添加了一个片段.

In a class i am adding a Fragment programatically.

这个片段包含一个按钮,我想要一个 onClick 实现.

This Fragment contains a Button, which i want to have an onClick implementation.

这是我的课程:

public class ShareProduct extends SherlockFragmentActivity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.share_product);

        FragmentManager fragmentManager = getSupportFragmentManager();
        final FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();

        ProductFragment1 fragment = new ProductFragment1();
        fragmentTransaction.add(R.id.share_product_parent, fragment);
        fragmentTransaction.commit();

        Button done_button = (Button) fragment.getView().findViewById(
                R.id.done_product_1);
        done_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {

                ProductFragment2 fragment = new ProductFragment2();
                fragmentTransaction
                        .replace(R.id.share_product_parent, fragment);
                fragmentTransaction.commit();
            }
        });
    }
}

而我的 ProductFragment1 类是:

and my ProductFragment1 class is:

public class ProductFragment1 extends SherlockFragment {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater
                .inflate(R.layout.share_product_1, container, false);
        return view;
    }
}

我的主类使用的布局是:

and the layout my main class uses is:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/share_product_parent"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:gravity="right|center_vertical"
    android:orientation="horizontal" >

</RelativeLayout>

我的 ProductFragment1 使用的布局是:

and the layout my ProductFragment1 uses is:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="25dp" />

    <EditText
        android:id="@+id/et1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv1"
        android:textSize="25dp" />

    <Button
        android:id="@+id/done_product_1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/et1"
        android:text="Done" />

</RelativeLayout>

问题在于:

我在主类的这一行收到 NullPointerException:

I am getting a NullPointerException at this line in my main class:

Button done_button = (Button) fragment.getView().findViewById(R.id.done_product_1);
done_button.setOnClickListener ....

当我搜索片段上返回的 getView() 时.我发现它从 onCreateView();

when i searched for what getView() on a fragment returns. I found out that it returns the view from onCreateView();

我检查过它没有返回 null.

I checked it doesn't return null.

谢谢

推荐答案

您在这里走错了路.您获得 NPE 是因为尚未创建 Fragments 视图.FragmentsActivities 一样也有生命周期.

You are on the wrong track here. You get the NPE because the Fragments views is not created yet. Fragments also have a lifecycle just like Activities.

您应该做的是在您的 Fragments onViewCreated() 方法中分配 OnClickListener.然后……您应该创建一个回调并通知您的主机 Activity 事件.

What you should be doing is assigning the OnClickListener inside your Fragments onViewCreated() method. And from there... you should create a callback and notify your hosting Activity of the event.

这篇关于Android:如何获取片段的视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆