首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在android中无法执行警报对话框中的片段事务

在android中无法执行警报对话框中的片段事务
EN

Stack Overflow用户
提问于 2017-06-20 10:32:18
回答 2查看 389关注 0票数 1

我有一个片段,其中我有谷歌地图,我试图将这个片段保存在一个警报对话框中。但这绝不是接受。

首先,它不允许我在对话框中允许v4片段。我甚至试图通过构造函数传递这个v4片段对象。

我收到一个错误,说该活动不应该有构造函数!!这是多么令人沮丧!!

这是我的片段代码:

代码语言:javascript
复制
package com.motowala.AfterLogin;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.acs.R;


public class MapDialogFragment extends Fragment implements OnMapReadyCallback {

    View v;
    MapView googleMapView;
    GoogleMap googleMap;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.google_map_fragment, container, false);
        return v;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        googleMapView=(MapView)v.findViewById(R.id.google_map_view);
        googleMapView.onCreate(null);
        googleMapView.onResume();
        googleMapView.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        MapsInitializer.initialize(getActivity());
        this.googleMap=googleMap;
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.addMarker(new MarkerOptions().position(new LatLng(16,80)));
    }
}

我用于片段布局的代码如下

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.acs.AlertAndProgressDialogs.GoogleMapLocationPicker"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.google.android.gms.maps.MapView
        android:id="@+id/google_map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.google.android.gms.maps.MapView>
</FrameLayout>

我用于警报对话框的代码如下:

代码语言:javascript
复制
package com.acs.AlertAndProgressDialogs;

import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

import com.google.android.gms.maps.MapView;
import com.acs.AfterLogin.MapDialogFragment;
import com.acs.R;


public class GoogleMapLocationPicker extends DialogFragment {

    View layout;
    MapView mapView;
    MapDialogFragment googleMapFragment;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        LayoutInflater inflater = getActivity().getLayoutInflater();
        layout = inflater.inflate(R.layout.google_map_frag_dialog, null);
        googleMapFragment=new MapDialogFragment();
        FragmentManager manager=getActivity().getFragmentManager();
        FragmentTransaction transaction=manager.beginTransaction();
        transaction.replace(R.id.map_replacable_frag,googleMapFragment);



    /* This is where I'm ending with error. It is saying it requires a fragment 
    object but it found object of type MapDialogFragment. 
    I have even tried using getChildFragmentManager() even that is also not 
    working at here.*/


    }
}

提前谢谢..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-20 11:13:53

我为你的problem..Tested找到了一个解决方案,它正在起作用。

以下是代码:

代码语言:javascript
复制
public class GoogleMapLocationPicker extends DialogFragment implements OnMapReadyCallback {

    View layout;
    MapView mapView;
    GoogleMap googleMap;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        LayoutInflater inflater = getActivity().getLayoutInflater();
        layout = inflater.inflate(R.layout.google_map_frag_dialog, null);
        mapView = (MapView) layout.findViewById(R.id.google_map_view);
        AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
        builder.setView(layout);
        return builder.create();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mapView.onCreate(null);
        mapView.onResume();
        mapView.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        Toast.makeText(getActivity(), "Map ready...", Toast.LENGTH_SHORT).show();
        MapsInitializer.initialize(getActivity());
        this.googleMap=googleMap;
        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        googleMap.addMarker(new MarkerOptions().position(new LatLng(16,80)));
    }
}

这个对话框随图而来。希望这会有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2017-06-20 10:44:34

你试图实现这一错误的方式。不能用对话框片段替换v4片段。首先,在对话框片段中使用google是不可取的,但是如果仍然想以这种方式使用它,则应该使用自定义的对话框片段。

试试这个:

代码语言:javascript
复制
public class CustomDialogFragment extends DialogFragment {
    /** The system calls this to get the DialogFragment's layout, regardless
        of whether it's being displayed as a dialog or an embedded fragment. */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout to use as dialog or embedded fragment
        return inflater.inflate(R.layout.yourmaplayout, container, false);
    }

    /** The system calls this only when creating the layout in a dialog. */
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // The only reason you might override this method when using onCreateView() is
        // to modify any dialog characteristics. For example, the dialog includes a
        // title by default, but your custom layout might not need it. So here you can
        // remove the dialog title, but you must call the superclass to get the Dialog.
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }
}

然后显示对话框:

代码语言:javascript
复制
FragmentManager fragmentManager = getSupportFragmentManager();
CustomDialogFragment newFragment = new CustomDialogFragment();
newFragment.show(fragmentManager, "dialog");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44650621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档