如何将上下文转换为片段引用?

5

我有一个名为'Common'的类和一个名为'FragmentTest'的片段。'Common.java'是一个通用类,具有其他活动所需的一些常用功能。这些功能通过每个活动的上下文访问。在这里,我正在将片段的上下文传递给该类中的一个函数。我像这样做:

在片段中:

 Common commonObj = new Common();
 commonObj.myfunction(this.getActivity(),"Do you want to Update ?");

在进行一些操作后,我想返回到片段类中。代码如下:

public void myfunction(Context context , String str){    
   //....//
  if(context.getClass().isInstance(FragmentTest.class)){
      **FragmentTest mContext = (FragmentTest)context;**
      mContext.FunctionInFragment();
  }
}

但是我在这方面存在错误。因为无法将上下文强制转换为片段引用。请有人帮忙。

FragmentTest是一个Fragment还是一个FragmentActivity?它们并不相同,而且你不能把Context转换成Fragment,因为Fragment不是一个Context - Mike M.
这是一个片段。 - bepositive
该片段在Activity类中使用。 - bepositive
好的,你不能这样做,因为Fragment不是一个Context - Mike M.
commonObj.myfunction(this.getActivity(),"你想要更新吗?"); 用这个我们可以传递它,对吧?那么为什么我们无法获取引用呢? - bepositive
你没有传递 Fragment。你传递的是它所在的 Activity。如果你想传递 Fragment,请删除 getActivity(),并更改你方法的参数类型,或者重载该方法。 - Mike M.
2个回答

4
首先,您不能将Context强制转换为Fragment,因为Fragment没有扩展ContextActivity扩展Context,这就是为什么在Activity中进行此操作时,您尝试的操作可以成功。 我建议您的Common类中的方法最好完全不知道Fragment的存在。 这样它们就不会相互“耦合”。 为了实现这一点,您可以使用回调接口。 按照以下方式创建一个接口:
public interface Callback<T> {

    onNext(T result);
}

然后,您可以将 Common 中的方法更改为以下内容:
public void myfunction(Callback<Void> callback , String str){    

    //....//
    callback.onNext(null);
}

当你从Fragment中调用Common中的方法时,可以像这样:

Common commonObj = new Common();
commonObj.myfunction(
    new Callback<Void>() {
        @Override
        public void onNext(Void result) {
            functionInFragment();
        }
    },
    "Do you want to Update ?"
);

如果你需要将数据发送回函数,则可以更改回调的返回类型。例如,如果您想要传递一个字符串返回值,您将使用 Callback<String>,然后原始调用中的方法将如下所示:

new Callback<String>() {
    @Override
    public void onNext(String result) {

    }
}

在你的Common类中,你可以这样调用它:
public void myfunction(Callback<String> callback , String str){    

    //....//
    String result = "Hello from common";
    callback.onNext(result);
}

非常感谢!你救了我的一天 :) - bepositive

0
你可以像这样做:
public void myfunction(BaseFragment fragment, String str){ 
  //....//
  if(fragment.getClass().isInstance(FragmentTest.class)){
      FragmentTest fr = (FragmentTest) fragment;
      fr.FunctionInFragment();
  }
}

即使用一些基础片段(BaseFragment)并从中继承。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接