2012-08-31 68 views
0

我正在開發使用碎片的Android 3.1應用程序。通過編程創建的按鈕上的OnClick事件處理程序

在其中一個片段上,需要創建按鈕併爲其中的每個按鈕設置一個onClick事件處理程序n

要做到這一點,我想在FragmentActivity上創建一個方法來處理這些事件,但我不知道如何。注意:FragmentActivity是使用android.support.v4.view.ViewPager管理所有片段的android.support.v4.app.FragmentActivity

在另一個片段,我有以下XML代碼:

<Button 
     android:id="@+id/btnTakeArticlePhotos" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:text="@string/btn_take_photo" 
     android:onClick="onTakePhotoClick" /> 

而這種代碼在FragmentActivity

public void onTakePhotoClick(View view) 
{ 
    Log.v("FillEReportFragmentActivity", "onTakeFactoryPhotoClick"); 
    int imgType, imgSubType; 

    switch (view.getId()) 
    { 
     case R.id.btnTakeFactoryPhotos: 
      imgType = ImageType.EREPORT; 
      imgSubType = SubImageType.EREPORT_FACTORY_OUTLOOK; 
     break; 
     case R.id.btnTakeArticlePhotos: 
      imgType = ImageType.ARTICLE; 
      imgSubType = SubImageType.NONSET; 
     default: 
      imgType = -1; 
      imgSubType = -1; 
     break; 
    } 

    Intent intent = new Intent(FillEReportFragmentActivity.this, CameraActivity.class); 
    intent.putExtra(BundleKeys.tablePk, eReportId); 
    intent.putExtra(BundleKeys.imgType, imgType); 
    intent.putExtra(BundleKeys.imgSubType, imgSubType); 

    startActivityForResult(intent, CAMERA_REQUEST_CODE); 
} 

我想要做同樣與這些n按鈕:上創建方法FragmentActivity來處理所有onClick事件。

我看到,如果我想要在編程創建的按鈕上處理onClick事件,我需要實現onClickEventListener

如何處理FragmentActivity上的onClick事件?還是有更好的方法?

回答

3

你應該讓你的FragmentActivity工具View.OnClickListener

getView().findViewById(R.id.Button1).setOnClickListener(
            (OnClickListener)getActivity)); 

你也可以定義自己的interface,使您的Activity實現該interfaceonActivityCreated()相同,並讓Fragment實現:

FragmentonActivityCreated()回調,你可以做以下

然後OnClickListener然後打電話給你的Activity這樣:

public MyFragment extends Fragment implements OnClickListener(){ 
     public MyInterface mInterface; 

     protected void onActiviyCreated(){ 
      mInterface=(MyInterface)getActivity(); 
     } 

     public void onViewCreated(View view, Bundle savedInstanceState){ 
      view.findViewById(R.id.myButton).setOnClickListener(this); 
     } 
     public void onClick(View v){ 
      .... 
      mInterface.buttonClicked(); 
     } 
} 
相關問題