【问题标题】:OnClick event handler on buttons created programmatically以编程方式创建的按钮上的 OnClick 事件处理程序
【发布时间】:2012-08-31 13:11:44
【问题描述】:

我正在开发一个使用片段的 Android 3.1 应用程序。

在其中一个片段上,需要创建 n 个按钮并为每个片段设置一个 onClick 事件处理程序。

为此,我想在FragmentActivity 上创建一个方法来处理这些事件,但我不知道如何。注意:FragmentActivity 是一个android.support.v4.app.FragmentActivity,它使用android.support.v4.view.ViewPager 管理所有片段。

在另一个片段上,我有以下XMLcode:

    <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 事件?还是有更好的方法?

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    你应该让你的FragmentActivity 实现View.OnClickListener

    然后在Fragment 回调中的onActivityCreated() 中,您可以执行以下操作:

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

    您还可以定义自己的 interface 并让您的 Activity 实现 interfaceonActivityCreated() 中的相同,让 Fragment 实现 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();
          }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多