Is there any way to Detect userInterations in Android fragments?

坚强是说给别人听的谎言 提交于 2021-01-02 05:54:36

问题


Could any one help me out with this situation.

I have implemented OnUserInteraction() method for Android Activity it is working fine for me.

But I want it for Fragments too.How can i able call OnUserInteraction() or is there any another way to identify userInteraction with the UI.


回答1:


@Sunil's answer causes java.lang.StackOverflowError so I corrected it. Below code works smoothly

Create a java class in your app named UserInterationListener and put below code there

public interface UserInteractionListener {
    void onUserInteraction();
}

Then create an instance variable in your activity, for this interface as below

private UserInteractionListener userInteractionListener;

Then implement a setter method for this variable, in your activity.

public void setUserInteractionListener(UserInteractionListener userInteractionListener) {
    this.userInteractionListener = userInteractionListener;
}

Now override the onUserInteraction method of your activity and if the listener variable is not null, invoke the interface method.

@Override
public void onUserInteraction() {
    super.onUserInteraction();
    if (userInteractionListener != null)
        userInteractionListener.onUserInteraction();
}

Now, in your fragment class, implement UserInteractionListener as below

public myFragment extends Fragment implements UserInteractionListener

also override interface's method

@Override
public void onUserInteraction(){
//TODO://do your work on user interaction
}

then in your fragment invoke your activity's userinteraction setter method like below

((YourActivity) getActivity()).setUserInteractionListener(this);

this last part is important.




回答2:


There is another way around.

Create a listener in your activity as below

public interface UserInteractionListener {
    void onUserInteraction();
}

Then create an instance variable in your activity, for this interface as below

private UserInteractionListener userInteractionListener;

Then implement a setter method for this variable, in your activity. (You can even keep a List of eventlistener objects, if you want to pass same userinteraction to multiple consumers)

public void setUserInteractionListener(UserInteractionListener userInteractionListener) {
    this.userInteractionListener = userInteractionListener;
}

Now override the onUserInteraction method of your activity and if the listener variable is not null, invoke the interface method.

@Override
public void onUserInteraction() {
    super.onUserInteraction();
    if (userInteractionListener != null)
        userInteractionListener.onUserInteraction();
}

Now, in your fragment class, register for events as below

((YourActivity) getActivity()).setUserInteractionListener(new YourActivity.UserInteractionListener() {
    @Override
    public void onUserInteraction() {
        // Do whatever you want here, during user interaction
    }
});


来源:https://stackoverflow.com/questions/40842199/is-there-any-way-to-detect-userinterations-in-android-fragments

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!