2017-05-25 2 views
0

デベロッパーコンソールでは、さまざまなデバイスから複数のクラッシュレポートが表示されます。

スタックトレース:

java.lang.RuntimeException: 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524) 
    at android.app.ActivityThread.access$900(ActivityThread.java:154) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:234) 
    at android.app.ActivityThread.main(ActivityThread.java:5526) 
    at java.lang.reflect.Method.invoke(Native Method:0) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: android.content.res.Resources$NotFoundException: 
    at android.content.res.Resources.getValue(Resources.java:1358) 
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2787) 
    at android.content.res.Resources.getLayout(Resources.java:1172) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:421) 
    at ru.neverdark.csm.abs.AbsTabFragment.onCreateView(AbsTabFragment.java:46) 
    at ru.neverdark.csm.fragments.MapTabFragment.onCreateView(MapTabFragment.java:122) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 

マイコード:

// AbsTabFragment 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(mLayoutId, container, false); // line 46 
     View prevTab = view.findViewById(R.id.prev_tab); 
     View nextTab = view.findViewById(R.id.next_tab); 

     OnPrevNextClickListener clickListener = new OnPrevNextClickListener(); 

     if (prevTab != null) { 
      prevTab.setOnClickListener(clickListener); 
     } 

     if (nextTab != null) { 
      nextTab.setOnClickListener(clickListener); 
     } 

     return view; 
    } 

    protected void setData(int layoutId, OnTabNaviListener listener) { 
     mLayoutId = layoutId; 
     mTabNaviCallback = listener; 
    } 

MapTabFragment

public class MapTabFragment extends AbsTabFragment implements OnMapReadyCallback { 
    public MapTabFragment() { 
     // Required empty public constructor 
    } 

    public static MapTabFragment getInstance(OnTabNaviListener listener, OnMapFragmentListener callback) { 
     MapTabFragment fragment = new MapTabFragment(); 
     fragment.setData(R.layout.fragment_map_tab, listener); 
     fragment.mCallback = callback; 
     return fragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     Log.v(TAG, "onCreateView: "); 
     View view = super.onCreateView(inflater, container, savedInstanceState); // line 122 

     mDistance = (DataCard) view.findViewById(R.id.distance); 
     mAverageSpeed = (DataCard) view.findViewById(R.id.average_speed); 
     mActivityTime = (DataCard) view.findViewById(R.id.activity_time); 
     mTotalTime = (DataCard) view.findViewById(R.id.total_time); 
     mAntenna = (Antenna) view.findViewById(R.id.antenna); 

     mDistance.setTitleNote(R.string.km); 
     mAverageSpeed.setTitleNote(R.string.kmch); 

     SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map_fragment); 
     mapFragment.getMapAsync(this); 
     return view; 
    } 

作成フラグメント:

mMapTabFragment = MapTabFragment.getInstance(this, this); 
// .. fragments used in ViewPager with CustomAdapter class: 

    private class CustomAdapter extends FragmentPagerAdapter { 
     CustomAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      TABS tab = TABS.values()[position]; 

      if (tab == TABS.MAP) { 
       return mMapTabFragment; 
      } else if (tab == TABS.COMPASS) { 
       return mCompassTabFragment; 
      } else if (tab == TABS.INFO) { 
       return mInfoTabFragment; 
      } 

      return null; 
     } 

     @Override 
     public int getCount() { 
      return TABS.values().length; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      TABS tab = TABS.values()[position]; 
      return getString(tab.getTitle()); 
     } 
    } 

問題を再現しようとしましたが、失敗しました。どこが間違っていますか?より多くのコードが必要な場合 - 私はそれを提供する準備ができています。

fragment_map_tab.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                                   
    xmlns:dataCard="http://schemas.android.com/apk/res-auto"                                      
    xmlns:tools="http://schemas.android.com/tools"                                         
    android:layout_width="match_parent"                                            
    android:layout_height="match_parent"                                           
    tools:context="ru.neverdark.csm.fragments.MapTabFragment">                                      

    <LinearLayout 
     android:id="@+id/first_row" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginEnd="16dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     android:layout_marginTop="16dp" 
     android:orientation="horizontal"> 

     <ru.neverdark.widgets.DataCard 
      android:id="@+id/total_time" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      dataCard:title="@string/total_time" 
      dataCard:value="@string/zero_time" /> 

     <ru.neverdark.widgets.DataCard 
      android:id="@+id/activity_time" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="8dp" 
      android:layout_marginStart="8dp" 
      android:layout_weight="1" 
      dataCard:title="@string/clean_time" 
      dataCard:value="@string/zero_time" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/second_row" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/first_row" 
     android:layout_marginBottom="16dp" 
     android:layout_marginEnd="16dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     android:layout_marginTop="8dp" 
     android:orientation="horizontal"> 

     <ru.neverdark.widgets.DataCard 
      android:id="@+id/distance" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      dataCard:title="@string/distance" /> 

     <ru.neverdark.widgets.DataCard 
      android:id="@+id/average_speed" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="8dp" 
      android:layout_marginStart="8dp" 
      android:layout_weight="1" 
      dataCard:title="@string/average_speed" /> 
    </LinearLayout> 

    <fragment 
     android:id="@+id/map_fragment" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/second_row" /> 

    <ru.neverdark.widgets.Antenna 
     android:id="@+id/antenna" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_alignTop="@+id/map_fragment" 
     android:layout_margin="12dp" /> 

    <ImageView 
     android:id="@+id/next_tab" 
     style="@style/NextTabButton" /> 

</RelativeLayout> 
+0

ポスト 'レイアウト/ fragment_map_tab.xml' – pskink

+0

プロジェクト、いくつかの構築/クリーンにしようとしましたあなたがプロジェクトをきれいにして再ビルドするまで、あなたのXMLファイルに問題があることを確認してください。 –

+0

@pskink xmlは投稿に添付されています – Artem

答えて

1

それはフラグメントが永続しないためonCreateViewが、呼び出された0を返しmLayoutIdためのフィールドです。あなたはBundlemLayoutIdを入れて、フラグメントへの引数として渡す必要があります。

public static MapTabFragment getInstance(OnTabNaviListener listener, OnMapFragmentListener callback) { 
    MapTabFragment fragment = new MapTabFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("mLayoutId", R.layout.fragment_map_tab); 
    fragment.setArguments(args); 
    ... 
    return fragment; 
} 

そしてAbsTabFragmentから:

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(getArguments().getInt("mLayoutId"), container, false); 
    ... 
} 
+1

これは正しい答えのようです。この動作をシミュレートすると、[設定 - >開発者オプション]の[アクティビティを保存しない]チェックボックス(https://hedgehogjim.files.wordpress.com/2015/02/androiddontkeepactivitieshighlighted.png)を有効にすることができます。 – azizbekian

関連する問題