2016-06-28 93 views
0

我试图从父片段访问另一个片段。当我在布局中使用“包含”时,应用会返回一个NPE。我从其他文章阅读,你需要实例化包含的布局。我的代码有什么问题?我也尝试将它作为一种观点来安置,并且仍然给我NPE。当我注释掉包含标签时,应用程序正常工作。使用包括布局时的NPE

FATAL EXCEPTION: main 
    Process: lee.guide.ffbe.com.braveexviusguide, PID: 4388 
    java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference 
     at android.widget.LinearLayout.hasDividerBeforeChildAt(LinearLayout.java:637) 
     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1155) 
     at android.widget.TableRow.onMeasure(TableRow.java:114) 
     at android.view.View.measure(View.java:18417) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5801) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1835) 
     at android.widget.TableLayout.measureChildBeforeLayout(TableLayout.java:464) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:725) 
     at android.widget.TableLayout.measureVertical(TableLayout.java:476) 
     at android.widget.TableLayout.onMeasure(TableLayout.java:439) 
     at android.view.View.measure(View.java:18417) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:18417) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5801) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1835) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:725) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:616) 
     at android.view.View.measure(View.java:18417) 
     at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:2015) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.widget.ScrollView.onMeasure(ScrollView.java:484) 
     at android.view.View.measure(View.java:18417) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:18417) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:18417) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:18417) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5801) 
     at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668) 
     at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90) 
     at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1170) 
     at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:733) 
     at android.view.View.measure(View.java:18417) 
     at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1075) 
     at android.view.View.measure(View.java:18417) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5801) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
     at android.view.View.measure(View.java:18417) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5801) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1835) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:725) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:616) 
     at android.view.View.measure(View.java:18417) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5801) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:18417) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5801) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1835) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:725) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:616) 

这里是我试图包括布局:

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

    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left"> 

     <TableRow 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:layout_weight="100" 
      android:background="@android:color/holo_blue_light" 
      android:gravity="center" 
      android:padding="10dp" 
      android:showDividers="middle|beginning|end" 
      android:textAlignment="center"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_column="1" 
       android:layout_weight="25" 
       android:gravity="center" 
       android:text="@string/status" 
       android:textColor="#FFFFFF" 
       android:textSize="14sp" /> 

      <TextView 
       android:id="@+id/textClock" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_column="2" 
       android:layout_weight="25" 
       android:gravity="center" 
       android:text="  Initial" 
       android:textColor="#FFFFFF" /> 

      <TextView 
       android:id="@+id/textClock1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_column="2" 
       android:layout_weight="25" 
       android:gravity="center" 
       android:text=" Max 1*" 
       android:textColor="#FFFFFF" /> 

      <TextView 
       android:id="@+id/textClock2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_column="2" 
       android:layout_weight="25" 
       android:gravity="center" 
       android:text="Max 2*" 
       android:textColor="#FFFFFF" /> 
     </TableRow> 

    </TableLayout> 
</RelativeLayout> 

这里是我称之为 “table_esper_header”:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/siren_stats" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     > 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    > 

    <ImageView 
     android:layout_width="@dimen/espersize" 
     android:layout_height="@dimen/espersize" 
     android:layout_gravity="top|center" 
     android:id="@+id/imgEsperInfo" 
     android:scaleType="fitXY" 
     android:layout_marginTop="15dp" 
     android:layout_marginBottom="15dp"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/esper_name" 
     android:layout_gravity="top|center" 
     android:textSize="15sp" 
     android:textColor="#000000" 
     android:layout_marginBottom="15dp" 
     android:typeface="sans" /> 


    <include layout="@layout/table_esper_header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     ></include> 

    <!--<include layout="@layout/table_esper_stats"--> 
     <!--android:layout_height="wrap_content"--> 
     <!--android:layout_width="match_parent"></include>--> 
</LinearLayout> 
    </ScrollView> 
</RelativeLayout> 

在我的片段类此,我实例化包含的布局:

public class EsperInfo extends Fragment { 

    DatabaseReference root = FirebaseDatabase.getInstance().getReference(); 
    String espername; 
    Bundle bundle; 
    ImageView imgEsper; 
    TextView esper_name; 
    RelativeLayout table_header; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.esper_info, container, false); 
     esper_name = (TextView)v.findViewById(R.id.esper_name); 
     imgEsper = (ImageView) v.findViewById(R.id.imgEsperInfo); 
     Log.v("INSTANTIATEEE", "INCLUDEEE MEEE"); 
     //crashes after this line 
     table_header = (RelativeLayout) v.findViewById(R.id.table_esper_header); 
     Log.v("INSTANTIATEEE", "INCLUDEEE MEEE2"); 
     bundle = this.getArguments(); 
     espername = bundle.getString("espername", espername); 
     setImageResource(espername); 
     espername = espername.substring(0,1).toUpperCase() + espername.substring(1).toLowerCase(); 
     esper_name.setText(espername) ; 
//  Log.v("BUNDLEEEEE", espername); 

     return v; 
    } 

     public void setImageResource(String espername){ 
      if (espername == "siren"){ 
       imgEsper.setBackgroundResource(R.mipmap.siren2); 
      } 
      else if (espername == "ifrit"){ 
       imgEsper.setBackgroundResource(R.mipmap.ifrit2); 
      } 
      else if (espername == "golem"){ 
       imgEsper.setBackgroundResource(R.mipmap.golem2); 
      } 
      else if (espername == "shiva"){ 
       imgEsper.setBackgroundResource(R.mipmap.shiva); 
      } 
     } 
    public void retrieveEsper(){ 
     DatabaseReference esperRoot = FirebaseDatabase.getInstance().getReference(); 
     esperRoot.child("esper").child("ifrit").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       EsperStatsModel esperstats = dataSnapshot.getValue(EsperStatsModel.class); 
       Log.v("FIREBASE_SAMPLE", esperstats.getAttack1()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 
} 
+0

放文件名的XML来

+0

table_esper_header已经在包括标签。 – leenolasco

+0

table_esper_header是您的布局ID或文件名称。你需要包含你的file_name不是布局名称 –

回答

0

我觉得很奇怪,但是当我删除这条线也工作得很好:

android:showDividers="middle|beginning|end"