通过灵活的监听器重复使用片段

时间:2018-11-13 10:32:05

标签: android android-fragments

我有一个片段,其中包含一个按钮。我想重用此片段,因此OnClickListener不是硬编码的,而是由调用此片段的活动定义的。 Activity为此实现了所需的接口,并且Fragment在其oncreate方法中获得了引用。

我对此有两个问题

public void TestFragment extends Fragment {

    ...
    private IAction mAction = null;

    @Override 
    public void OnAttach(Context ctx) {
        mAction = (Action) getActivity();
    }

    @Override    
    public void onClickListener() { 
        action(this); 
    }

    public interface IAction { 
        void action(Fragment f); 
    }

    ...
}


public class MainActivity extends AppCompatActivity implements IAction {
    ...

    public void onCreate() {
        getSupportFragmentManager().beginTransaction()
                    .add(R.id.content, Testfragment.gestInstance()
                    .commit();
    }

    public void IAction(Fragment f) { 
        f.doSomething()...
    } 

    ...
}
  1. 这是构建可重用片段的好习惯吗?

  2. 我将对此进行扩展:如果某个活动打开了此片段,则它将使用该活动中定义的动作。好的,这可行。这是当前的行为。

但是也许这个片段是由另一个片段(嵌套)打开的,所以getActivity是错误的。是否有类似的东西

if(parent.isActivity) {
  mAction = (Action) getActivity()
} else if(parent.isFragment) {
  mAction = (Action) getParentFragment()
}

1 个答案:

答案 0 :(得分:0)

getActivity()仍然可以工作,即使该片段嵌套在另一个片段中。

但是,如果您想将其与父片段绑定,可以使用getParentFragment()

if (getParentFragment() != null) {
   // fragment is nested
} else {
   // not nested
}