Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用接口将数据从活动传递到非片段/活动类_Java_Android_Android Fragments - Fatal编程技术网

Java 不使用接口将数据从活动传递到非片段/活动类

Java 不使用接口将数据从活动传递到非片段/活动类,java,android,android-fragments,Java,Android,Android Fragments,我想将此代码更改为: public boolean getFavourite(Winkel winkel){ boolean isFavourite = false; MyDBHandler dbHandler = new MyDBHandler(context,null,null,1); User user = dbHandler.loggedIn(); //This method isn't usable anymore isFavourite = dbHan

我想将此代码更改为:

public boolean getFavourite(Winkel winkel){
    boolean isFavourite = false;
    MyDBHandler dbHandler = new MyDBHandler(context,null,null,1);
    User user = dbHandler.loggedIn(); //This method isn't usable anymore
    isFavourite = dbHandler.isFavourite(user,winkel);
    return isFavourite;
}
我使用我的数据库来跟踪最初登录的用户,但通过简单地将数据从第一个活动发送到第二个活动,就可以很容易地改变这一点

public boolean getFavourite(Winkel winkel){
    boolean isFavourite = false;
    MyDBHandler dbHandler = new MyDBHandler(context,null,null,1);
    isFavourite = dbHandler.isFavourite(user,winkel);
    return isFavourite;
}
然后,在我的第二个活动中,我可以使用以下方法调用所有数据库函数:

@Override
public void login(User user){
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("Username",user.getUserName());
    startActivity(intent);
}
(因为我需要用户名作为数据库的密钥

然而,我的活动有三个片段,其中两个片段使用我的适配器作为recyclerview。这些片段实现了适配器类中提供的接口,就是这个(只是说明这是完整的,接口是无关的,事实是我的片段必须实现这个接口)

现在,我需要适配器类中的用户名。它必须来自我的活动(因为它存储在那里),我不能使用接口,因为我已经在使用接口,我必须重写每个片段中的方法

我可以使用一个包将活动中的数据传递给所有片段,然后在片段中创建数据时将其传递给适配器。但这似乎有很多多余的代码。有更简单的方法吗?谢谢

编辑:

在适配器类中:

public interface ItemCLickCallback {
    void onItemClick(int p);
    void onSecItemClick(int p);
}
片段:

private CheckFavourite checkFavourite;


public void setCheckFavourite(final CheckFavourite checkFavourite){
    this.checkFavourite = checkFavourite;
}

boolean isFavourite = checkFavourite.getFavourite(winkel);

public interface CheckFavourite{
    boolean getFavourite(Winkel winkel);
}
活动:

   public class Overview extends Fragment implements Adaptor.ItemCLickCallback
Activity必须实现seconde接口,fragment实现seconde接口。但它们都在同一适配器实例上

我需要做什么(在我的活动中):

但我不能,因为我没有适配器,它是在我的片段中创建的

我试过:

   adaptor.setCheckFavourite(this);
在我的片段中,但这给了我一个错误:

   adaptor.setCheckFavourite(this.getActivity());
然而

Error:(60, 51) error: incompatible types: FragmentActivity cannot be converted to CheckFavourite.
在我的片段(另一个接口)中工作得非常好。如何修复此问题?

:)您可以使用多重继承。要使一个类实现多个接口,我们需要这样的接口:

  adaptor.setItemCLickCallback(this);
:)您可以使用多重继承。要使一个类实现多个接口,我们需要这样的接口:

  adaptor.setItemCLickCallback(this);

你知道你可以用逗号分隔多个接口吗?我现在很惭愧。我已经这么做了,只是忘了你没有在每个类中实现每个接口。哈哈。我应该删除我的问题,或者你可以提供你的评论作为答案,如果有人像我一样愚蠢,我会接受。你知道你可以使用多个接口,用逗号分隔每个接口吗?我现在很惭愧。我已经这么做了,只是忘了你没有在每个类中实现每个接口。哈哈。我应该删除我的问题,或者你可以提供你的评论作为答案,我会接受的,如果有人像梅韦特一样愚蠢,我实际上不知道怎么做。我的适配器在我的片段中创建,如果我想在创建接口的类中使用接口中的方法,我需要有上下文,但我不能在活动中设置上下文,因为适配器是在我的片段中创建的=/您可以调用
getActivity()
在你的片段中获取上下文。我正要问你一个新问题:)等等,我实际上不知道怎么做。我的适配器在我的片段中创建,如果我想在创建接口的类中使用接口中的方法,我需要有上下文,但我不能在活动中设置上下文,因为适配器是在我的片段中创建的=/您可以调用
getActivity()
在您的片段中获取上下文。我正要请您打开一个新问题:)
  adaptor.setItemCLickCallback(this);
public class MyClass extends MyOtherClass implements MyInterface1, MyInterface2, ... , MyInterfaceN {

    // Need to implement all interface methods here

}