我正在尝试制作新的布局,自定义图片,R.id.imageStep1
。我在layout.addView(guideLayout)
收到错误。
这是我的java类:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide_base);
ViewGroup layout = (ViewGroup) findViewById(R.id.guide_base);
ViewGroup guideLayout = (ViewGroup) findViewById(R.id.guide_layout);
Intent intent = getIntent();
ImageView image;
image = (ImageView) findViewById(R.id.guideImage1);
String guideImage = intent.getStringExtra("guideImage");
int resId = guideLayout.getResources().getIdentifier(guideImage, "drawable", null);
image.setImageResource(resId);
layout.addView(guideLayout);
String guideTitle = intent.getStringExtra("guideTitle");
String guideText = intent.getStringExtra("guideText");
}
为什么guideLayout
如果我启动时为空
guideLayout = (ViewGroup) findViewById(R.id.guide_layout);
这是添加自定义值的新xml文件的正确方法吗?
guide_base.xml:
<?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"
android:id="@+id/guide_base">
</LinearLayout>
guide_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/guide_layout">
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
app:srcCompat="@drawable/one_black_36dp"
android:layout_marginLeft="8dp"
android:id="@+id/imageStep1"
android:contentDescription="Steps to follow"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="6dp" />
<TextView
android:text="TextView:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/titleStep1"
android:textColor="@color/colorGreenPrimary"
android:layout_marginBottom="2dp"
android:layout_marginLeft="4dp"
android:textSize="20sp"
android:layout_alignBottom="@+id/imageStep1"
android:layout_toRightOf="@+id/imageStep1"
android:layout_toEndOf="@+id/imageStep1"
android:textStyle="bold"/>
<TextView
android:id="@+id/textGuide1"
android:contentDescription="Guide Step 1"
android:layout_alignLeft="@+id/titleStep1"
android:layout_alignStart="@+id/titleStep1"
android:layout_below="@id/titleStep1"
android:layout_height="wrap_content"
android:textColor="@color/colorGreenSecondary"
android:textSize="16sp"
android:layout_width="330dp"
android:text="Si una persona está despierta pero menos alerta de lo usual, hágale una serie de preguntas sencillas, como: ¿Cuál es su nombre? ¿Qué día es? ¿Cuántos años tiene?" />
<ImageView
app:srcCompat="@drawable/persona_desmayada"
android:id="@+id/guideImage1"
android:scaleType="centerCrop"
android:contentDescription="zzz"
android:layout_height="125dp"
android:layout_width="145dp"
android:layout_marginTop="25dp"
android:layout_below="@+id/textGuide1"
android:layout_centerInParent="true" />
</RelativeLayout>
logcat的:
java.lang.RuntimeException:无法启动活动ComponentInfo {com.alertavecino.alertavecino / com.alertavecino.alertavecino.guide}:java.lang.NullPointerException:尝试调用虚方法'android.view.ViewGroup $ LayoutParams对空对象引用的android.view.View.getLayoutParams()'
答案 0 :(得分:0)
尝试使用LayoutInflater调用其他视图。
private View view = null ;
Button addbutton = null;
ViewGroup parent = null;
LayoutInflater inflater = null;
inflater= (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
addbutton = (Button)findViewById(R.id.btnAdd);
parent = (ViewGroup) findViewById(R.id.mainxml);
addbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view = inflater.inflate(R.layout.other, null);
parent.addView(view);
}
});
试试这个。希望这会有所帮助:)
答案 1 :(得分:0)
在setContentView(R.layout.guide_base)中;您正在声明活动的布局。在您的布局中,您只有guide_base,在这种情况下
ViewGroup guideLayout = (ViewGroup) findViewById(R.id.guide_layout);
将返回null,因为它不存在于guide_base布局中。 为什么不在guide_base中包含guide_layout布局?
如果您想在其他方面重复使用它。您可以将guide_base编辑为:
<?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"
android:id="@+id/guide_base">
<include layout="@layout/guide_layout"
android:id="@+id/guide_layout"/>
</LinearLayout>
如:https://developer.android.com/training/improving-layouts/reusing-layouts.html
中所述或使用充气机创建guide_layout视图。见How to inflate one view with a layout