我有一个片段,其中包含一个按钮。我想重用此片段,因此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()...
}
...
}
这是构建可重用片段的好习惯吗?
我将对此进行扩展:如果某个活动打开了此片段,则它将使用该活动中定义的动作。好的,这可行。这是当前的行为。
但是也许这个片段是由另一个片段(嵌套)打开的,所以getActivity是错误的。是否有类似的东西
if(parent.isActivity) {
mAction = (Action) getActivity()
} else if(parent.isFragment) {
mAction = (Action) getParentFragment()
}
答案 0 :(得分:0)
getActivity()
仍然可以工作,即使该片段嵌套在另一个片段中。
但是,如果您想将其与父片段绑定,可以使用getParentFragment()
if (getParentFragment() != null) {
// fragment is nested
} else {
// not nested
}