如何在Android中的WearableActivity启动的片段中使用getActivity?

时间:2016-01-22 12:18:51

标签: android-fragments wear-os

我有一个WearableActivity作为我的主要活动,我想将片段用于不同的布局。问题是当我尝试使用片段中的getActivity()来获取对主要活动的引用时,Android Studio说我无法从FragmentActivity转换为我的MainWearActivity(它扩展了WearableActivity)。

我的MainWearActivity课程:

public class MainWearActivity extends WearableActivity implements
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener{

    private WatchViewStub mContainerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_wear);
        mContainerView = (WatchViewStub) findViewById(R.id.mainContainer);
        mContainerView.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(WatchViewStub watchViewStub) {

            }
        });
    }

    @Override
    public void onConnected(Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }

    @Override
    public void onEnterAmbient(Bundle ambientDetails) {
        super.onEnterAmbient(ambientDetails);
    }

    @Override
    public void onUpdateAmbient() {
        super.onUpdateAmbient();
    }

    @Override
    public void onExitAmbient() {
        super.onExitAmbient();
    }
}

我的片段类:

public class NavigationFragment extends Fragment {
    View view;
    MainWearActivity mMainWearActivity;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.navigation_fragment, container, false);

        mMainWearActivity = (MainWearActivity) getActivity(); // ERROR HERE

        return view;
    }
}

当我尝试将getActivity()强制转换为我的主要活动时,它将不允许我。任何人都可以帮我解决这个问题吗?我需要对我的主要活动的引用,以便我可以将它用作上下文。感谢

修改

下面的字符串答案解决了这个问题。我想补充一点的另一个注意事项是,如果您使用的是片段寻呼机适配器,则必须在build.gradle中添加“compile'c​​om.android.support:support-v13:23.1.1'”。 ,并使用支持v13寻呼机适配器,它允许您从GetItem()返回android.app.Fragment。

2 个答案:

答案 0 :(得分:1)

您的NavigationFragmentandroid.support.v4.app.Fragment的实例吗?我猜是这样的,因为那是Fragment类,期望getActivity()返回FragmentActivity

如果我的猜测是正确的,您需要做的是找到NavigationFragment.java文件中的行:

import android.support.v4.app.Fragment;

并将其更改为

import android.app.Fragment;

您可能需要更改其他一些导入和调用,以删除对支持库及其类的引用。但是没有必要在Wear上使用支持片段 - 所有设备都是足够新的,可以原生地拥有片段。

答案 1 :(得分:0)

您应该实施AmbientMode.AmbientCallbackProvider而不是WearableActivity

这是新的首选方法,它仍然为您提供onEnterAmbient()onAmbientUpdate()onExitAmbient(),但也允许您使用Activity(或任何子类.. .FragementActivity等)。它还允许您支持架构组件。

Official docs call out the details