在不使用接口的情况下将数据从活动传递到非片段/活动类

时间:2016-07-30 16:37:47

标签: 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 = 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);
}

然后,在我的第二个活动中,我可以使用以下方法调用所有数据库函数:

  user.setUserName(intent.getStringExtra("Username"));

(因为我需要用户名作为我数据库的密钥。

但是,我的活动有三个片段,其中两个使用我的适配器进行recyclerview。这些片段实现了我的适配器类中提供的接口,就是这个接口(只是显示它是完整的,接口是无关紧要的,事实是我的片段必须实现这个接口)。

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

现在,我需要适配器类中的用户名。它必须来自我的活动(因为它存储的地方),我不能使用接口,因为我已经使用了一个接口,我必须覆盖每个碎片中的方法。

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

编辑:

在Adapter类中:

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

的活动:

public class SecondActivity extends AppCompatActivity implements Adaptor.CheckFavourite

Activity必须实现seconde接口,fragment实现第二个。但是它们都在同一个适配器实例上。

我需要做什么(基本上是我的活动):

   adaptor.setCheckFavourite(this);

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

我试过了:

   adaptor.setCheckFavourite(this.getActivity());

在我的片段中,但这给了我一个错误:

Error:(60, 51) error: incompatible types: FragmentActivity cannot be converted to CheckFavourite.

然而

  adaptor.setItemCLickCallback(this);

在我的片段(另一个界面)中工作得很好。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

:)您可以使用多重继承。为了能够使类实现多个接口,我们需要这样的东西:

public class MyClass extends MyOtherClass implements MyInterface1, MyInterface2, ... , MyInterfaceN {

    // Need to implement all interface methods here

}