2012-09-27 82 views
2

在類中,我以編程方式添加Fragment。Android:如何獲得片段的意見

這個片段包含一個按鈕,我想要一個onClick實現。

這裏是I類有:

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類:

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; 
    } 
} 

和我的主類使用的佈局是:

<?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用途是:

<?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異常:

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

當我搜索上的一個分段的回報是什麼getView()。我發現它返回的視圖從onCreateView();

我檢查它不返回null。

謝謝你

回答

8

你在這裏錯了。您獲得NPE,因爲尚未創建Fragments視圖。 Fragments也有一個生命週期,就像Activities

你應該做的是在你的FragmentsonViewCreated()方法中指定OnClickListener。並從那裏...你應該創建一個回調,並通知您的主辦Activity的事件。