我有一个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'com.android.support:support-v13:23.1.1'”。 ,并使用支持v13寻呼机适配器,它允许您从GetItem()返回android.app.Fragment。
答案 0 :(得分:1)
您的NavigationFragment
是android.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等)。它还允许您支持架构组件。