3

У меня есть карта с панелью инструментов и панель поиска автозаполнения в макете координат. Все отлично работает в версии Android выше 4.x, но в Android 4.2.2 отображается только карта. Панель инструментов и текст автозаполнения не отображаются.Android 4.2.2 Ошибка фрагмента карты

Пожалуйста, помогите мне понять, почему это происходит.

Xml:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<RelativeLayout android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <include 
     android:id="@+id/toolbar" 
     layout="@layout/activity_self_assigned_toolbar" /> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_marginEnd="10dp" 
     android:layout_marginStart="10dp" 
     android:layout_marginTop="60dp" 
     android:background="#FFFF" 
     android:weightSum="1"> 


     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="horizontal"> 

      <AutoCompleteTextView 
       android:id="@+id/autocomplete" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="bottom" 
       android:layout_weight="0.5" 
       android:hint="Type in your Location"> 

      </AutoCompleteTextView> 


      <ImageView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center" 
       android:layout_weight="0" 
       android:id="@+id/custom_map_cross" 
       android:src="@drawable/icn_close"/> 



      <!--<Button--> 
      <!--android:id="@+id/search_button"--> 
      <!--android:layout_width="20dp"--> 
      <!--android:layout_weight="0.5"--> 
      <!--android:layout_height="40dp"--> 
      <!--android:layout_marginRight="5dp"--> 
      <!--android:layout_gravity="center"--> 
      <!--android:padding="5dp"--> 
      <!--android:background="@color/indigo_500"--> 
      <!--android:textColor="@android:color/white"--> 
      <!--android:text="Save" />--> 
     </LinearLayout> 


    </android.support.design.widget.AppBarLayout> 


    <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</RelativeLayout> 
</android.support.design.widget.CoordinatorLayout> 

map.java:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
       View view = inflater.inflate(R.layout.custom_map_layout,container,false); 
       ButterKnife.inject(this,view); 
     //  view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
     //    ViewGroup.LayoutParams.MATCH_PARENT)); 
       // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     //  SupportMapFragment mapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map); 
     //  mMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)) 
     //    .getMap(); 
       initialise(); 
       initialiseListeners(); 
       autoCompView.setAdapter(new GooglePlacesAutocompleteAdapter(getActivity(), R.layout.map_single_item)); 
       autoCompView.setOnItemClickListener(this); 
       saveButton.setOnClickListener(this); 
       cancelButton.setOnClickListener(this); 
       return view; 
      } 


      private void initialise() { 
     //  toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp); 
       activity = (AppCompatActivity) getActivity(); 

       toolbar.setTitle("Address"); 
      } 

      private void initialiseListeners() { 
       toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         getActivity().onBackPressed(); 
        } 
       }); 
      } 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       View view1 = getActivity().getCurrentFocus(); 
       if (view1 != null) { 
        InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(view1.getWindowToken(), 0); 
       } 
     // and next place it, for exemple, on bottom right (as Google Maps app) 

       str = (String) parent.getItemAtPosition(position); 
     //  Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); 
       getLocationFromAddress(str); 
       if (latitude != null && longitude != null) { 
        LatLng latLng = new LatLng(latitude, longitude); 
        mMap.addMarker(new MarkerOptions().position(latLng)); 
        CameraPosition pos = CameraPosition.builder() 
          .target(latLng) 
          .zoom(12f) 
          .bearing(0.0f) 
          .tilt(0.0f) 
          .build(); 

        mMap.setMyLocationEnabled(true); 
        mMap.animateCamera(CameraUpdateFactory 
          .newCameraPosition(pos), null); 
       } 
      } 

      public void getLocationFromAddress(String strAddress) { 

       Geocoder coder = new Geocoder(context); 
       List<Address> address; 

       try { 
        address = coder.getFromLocationName(strAddress, 5); 
        if (address != null) { 

         Address location = address.get(0); 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 

        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 

      @Override 
      public void onClick(View v) { 
       switch (v.getId()) { 
        case R.id.self_assignment_save_textview: 
         new generateCheckinsTask(context).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
         break; 

        case R.id.self_assignment_cancel_textview: 
     // 
     //    getActivity().getSupportFragmentManager().popBackStack(); 

         break; 

       } 

      } 

      private class generateCheckinsTask extends AsyncTask { 
       private Context context; 

       generateCheckinsTask(Context context) { 
        this.context = context; 
       } 


       @Override 
       protected Object doInBackground(Object[] params) { 

        return null; 

       } 

       @Override 
       protected void onPostExecute(Object o) { 
        super.onPostExecute(o); 

        Time time = new Time(); 
        time.setToNow(); 

        Fragment_Self_Assignment self_assignment = new Fragment_Self_Assignment(); 
        self_assignment.updateAddress(str,latitude,longitude); 

        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         public void run() { 

     //     if (materialDialog != null && materialDialog.isShowing()) { 
     //      materialDialog.dismiss(); 
     //     } 
          getActivity().finish(); 

         } 
        }, 500); 

       } 

       @Override 
       protected void onPreExecute() { 
        super.onPreExecute(); 

       } 
      } 

      @Override 
      public void onResume() { 


       Spannable actionBarTitle = new SpannableString("Add Place"); 
       actionBarTitle.setSpan(
         new ForegroundColorSpan(Color.WHITE), 
         0, 
         actionBarTitle.length(), 
         Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

       if(((AppCompatActivity) getActivity()).getSupportActionBar() != null){ 

        ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(actionBarTitle); 
        InputMethodManager imm = (InputMethodManager) getActivity() 
          .getSystemService(Context.INPUT_METHOD_SERVICE); 

        if(!imm.isAcceptingText()){ 
         imm.hideSoftInputFromWindow(getView().getWindowToken(),0); 
        } 

       } 
       super.onResume(); 
      } 

      @Override 
      public void onStart() { 
       super.onStart(); 
       if (activity.getSupportActionBar().isShowing()) 
        activity.getSupportActionBar().hide(); 
      } 
      @Override 
      public void onStop() { 
       super.onStop(); 
       if (!activity.getSupportActionBar().isShowing()) 
        activity.getSupportActionBar().show(); 
      } 

    public static ArrayList autocomplete(String input) { 
      ArrayList resultList = null; 
      HttpURLConnection conn = null; 
      StringBuilder jsonResults = new StringBuilder(); 

      try { 
       StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON); 
       sb.append("?key=" + API_KEY); 
    //   sb.append("&components=country:gr"); 
       sb.append("&input=" + URLEncoder.encode(input, "utf8")); 
       URL url = new URL(sb.toString()); 
       conn = (HttpURLConnection) url.openConnection(); 
       InputStreamReader in = new InputStreamReader(conn.getInputStream()); 
       // Load the results into a StringBuilder 
       int read; 
       char[] buff = new char[1024]; 
       while ((read = in.read(buff)) != -1) { 
        jsonResults.append(buff, 0, read); 
       } 
      } catch (MalformedURLException e) { 
       Log.e(LOG_TAG, "Error processing Places API URL", e); 
       return resultList; 
      } catch (IOException e) { 
       Log.e(LOG_TAG, "Error connecting to Places API", e); 
       return resultList; 
      } finally { 
       if (conn != null) { 
        conn.disconnect(); 
       } 
      } 
      try { 
       // Create a JSON object hierarchy from the results 
       JSONObject jsonObj = new JSONObject(jsonResults.toString()); 
       JSONArray predsJsonArray = jsonObj.getJSONArray("predictions"); 
       // Extract the Place descriptions from the results 
       resultList = new ArrayList(predsJsonArray.length()); 
       for (int i = 0; i < predsJsonArray.length(); i++) { 
        System.out.println(predsJsonArray.getJSONObject(i).getString("description")); 
        System.out.println("============================================================"); 
        resultList.add(predsJsonArray.getJSONObject(i).getString("description")); 
       } 
      } catch (JSONException e) { 
       Log.e(LOG_TAG, "Cannot process JSON results", e); 
      } 
      return resultList; 
     }  
     } 

ПРОБЛЕМА: изображение (4.2.2 версия):

enter image description here

образ того же кода на большую версию (код работает нормально): enter image description here

+0

его карта фрагмент охватывает панель инструментов, установите маржу сверху для фрагмента карты, то вы можете увидеть панель инструментов –

+0

проблема с файлом XML. проверьте предварительный просмотр в другой версии Android в студии, вы получите его – DKV

ответ

1

проверить это один

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <include 
     android:id="@+id/toolbar" 
     layout="@layout/toolbar" /> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_marginEnd="10dp" 
     android:layout_marginStart="10dp" 
     android:layout_marginTop="60dp" 
     android:background="#FFFF" 
     android:weightSum="1"> 


     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="horizontal"> 

      <AutoCompleteTextView 
       android:id="@+id/autocomplete" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="bottom" 
       android:layout_weight="0.5" 
       android:hint="Type in your Location"> 

      </AutoCompleteTextView> 


      <ImageView 
       android:id="@+id/custom_map_cross" 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center" 
       android:layout_weight="0" 
       android:src="@drawable/pick_ticket_bg_large" /> 

     </LinearLayout> 


    </android.support.design.widget.AppBarLayout> 


</RelativeLayout> 

+0

Спасибо большое. Такая глупая ошибка. Спасибо за помощь . Кроме того, было бы признательно, если бы вы подняли вопрос. –

2

Вашего MapFragment является перекрывающимся вашим ToolBar и поиск автозаполнения бара, держите их выше MapFragment.

Попробуйте это.

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 

     <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/map" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

     <include 
      android:id="@+id/toolbar" 
      layout="@layout/activity_self_assigned_toolbar" /> 

     <android.support.design.widget.AppBarLayout 
      android:id="@+id/appbar" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_marginEnd="10dp" 
      android:layout_marginStart="10dp" 
      android:layout_marginTop="60dp" 
      android:background="#FFFF" 
      android:weightSum="1"> 


      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:orientation="horizontal"> 

       <AutoCompleteTextView 
        android:id="@+id/autocomplete" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_gravity="bottom" 
        android:layout_weight="0.5" 
        android:hint="Type in your Location"> 

       </AutoCompleteTextView> 

       <ImageView 
        android:layout_width="30dp" 
        android:layout_height="30dp" 
        android:layout_gravity="center" 
        android:layout_weight="0" 
        android:id="@+id/custom_map_cross" 
        android:src="@drawable/icn_close"/> 

      </LinearLayout> 

     </android.support.design.widget.AppBarLayout> 

    </RelativeLayout> 
</android.support.design.widget.CoordinatorLayout> 
+0

Да, это работает. Благодаря тонну . Кроме того, было бы признательно, если бы вы подняли вопрос. –