我正在尝试从父片段访问另一个片段。当我使用" include"在布局中,应用程序返回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>
以下是我打电话的方式&#34; table_esper_header&#34;:
<?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 :(得分:0)
我觉得这很奇怪但是当我删除这一行时它运行良好:
android:showDividers="middle|beginning|end"