当前位置: 首页 > 知识库问答 >
问题:

在活动中加载片段两次

金瑞
2023-03-14
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">

    ...


<LinearLayout android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rcyViatgesDetall"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="3"/>

<FrameLayout
    android:id="@+id/viatge_detail_container"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="6"
     />

在我之前提到的活动的自定义回收器视图适配器中,我想在点击我的一个元素时对碎片进行充电,例如:

 holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                    ViatgeDetallViewFragment fragment = new ViatgeDetallViewFragment();
                    //fragment.setArguments(arguments);
                    mActivity.getSupportFragmentManager().beginTransaction()
                            .replace(R.id.viatge_detail_container, fragment)
                            .commit();

这是我的片段类:

public class ViatgeDetallViewFragment extends Fragment implements OnMapReadyCallback {

    public static final String ARG_ID = "id";
    private GoogleMap mMap;
    private Marker mMarcadorActual;
    private static final int CODI_PETICIO_PERMIS_GPS = 13;

    public ViatgeDetallViewFragment() {
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_view, container, false);


        MapFragment mapFragment = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.fragment_view_map); //esto funciona
        mapFragment.getMapAsync(this);


        return rootView;
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;


        if (ActivityCompat.checkSelfPermission(this.getContext(), //solo this
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(this.getContext(),  //solo this
                        Manifest.permission.ACCESS_COARSE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {
            // NO tinc permisos, en demano
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(
                        new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, CODI_PETICIO_PERMIS_GPS);
            }
        } else {
            mMap.setMyLocationEnabled(true);
        }



 .....

    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults[0]==PackageManager.PERMISSION_GRANTED) {

            try {
                mMap.setMyLocationEnabled(true);
            }catch(SecurityException ex) {

            }
        }
    }
}

这个片段还加载了一个google Maps片段,您可以在它的布局中看到:

<LinearLayout android:id="@+id/layout_fragment_view" xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_view_map"
        class="com.google.android.gms.maps.MapFragment"></fragment>

</LinearLayout>

当我在一个项目中第一次点击时,一切正常,但当我在另一个项目中第二次点击时,我会得到以下错误:

共有1个答案

龙正初
2023-03-14

你试过动态膨胀地图片段吗??

当布局包含//fragment/>时,不能将该布局膨胀为片段。只有动态添加到片段中时,才支持嵌套片段。

碎片中的碎片

 类似资料:
  • 我想在Android的一个活动中添加两个片段。但在加法时,它给出了错误; activity_main.xml 片段的布局1 片段2的布局

  • 我有一个疑问,想澄清一些关于包含多个片段的活动的观点。 我有10个片段与一个活动(HomeActivity.java)相连;此活动包含一个导航抽屉和工具栏,带有多个图标,如搜索、添加、删除、后退按钮等。 我遵循的结构如下:, 用户点击抽屉菜单中的任何项目,我正在加载片段, 碎片加载- 我正在根据HomeActivity本身中的片段更改标题名称,基于工具栏。 我的导航抽屉项目只有一个片段,在frag

  • 在为客户端启动新应用程序时,我在再次问自己关于谁应该负责加载数据的同一个问题:活动还是片段。我已经为不同的应用程序采取了这两种选择,我想知道哪种模式是最好的,根据您的意见: 限制代码复杂性。 处理边缘情况(如屏幕旋转、屏幕运行省电、连接丢失等) 这允许有一些片段,这些片段只是被提供给一堆对象来显示。他们对加载数据和我们如何加载数据一无所知。 另一方面,活动使用所需的任何方法加载数据(例如,最初加载

  • 我有一个片段,基本上工作良好。在onResume方法中,当用户到达活动/片段时,我执行一个api调用以获取新的数据。 这个大部分时间都很好用。但是,当用户在update ui方法完成之前导航回父活动时,我遇到了一个问题。更新ui只是设置一些文本视图。 例如。当用户导航到活动和片段时,将调用上面的onResume。用户立即返回父活动。异步调用和更新ui尚未完成,我得到: 致命异常:主进程:com.p

  • 我正在学习Android Udacity课程,它已经过时了,所以我尝试通过手动添加一个片段到主活动中来更新它。这段代码构建得很好,但是当应用程序启动时,在android monitor中出现了一个很长的错误。 XML fragment_main.xml activity_main.xml list_itemm_forecast.xml 日志 06-23 11:23:02.878 3095-3095

  • 代码如下:- 产品片段: 我不知道我错在哪里。我已经搜索了错误,甚至尝试了以下链接的解决方案: Fragment MyFragment not attached to activity 我在SO上提出问题,但没有得到响应/答案。可能有一个小错误、语法/格式问题或重复问题,但我的案例可能与其他人的不同。 因此,请提供帮助并作出答复。 谢谢。 --编辑-- 家庭活动: 致命异常:主进程:com.pis