簡體   English   中英

Android-相對布局中的空指針參考

[英]Android - Null pointer reference in Relative Layout

我開了一小堂課來更改布局大小。

這是課程:

import android.app.Activity;
import android.util.DisplayMetrics;


public class LayoutResize extends Activity{

    public DisplayMetrics displayMetrics = new DisplayMetrics();

    public int width(int sizeX, DisplayMetrics displayMetrics)
    {
        int screenWidth = displayMetrics.widthPixels * sizeX / 100;
        return screenWidth;
    }

    public int height(int sizeY, DisplayMetrics displayMetrics)
    {
        int screenHeight = displayMetrics.heightPixels * sizeY / 100;
        return screenHeight;
    }
}

我在MainActivity這種方式使用它

public class MainActivity extends AppCompatActivity {

    DisplayMetrics displayMetrics = new DisplayMetrics();
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        LayoutResize layoutResize = new LayoutResize();

        RelativeLayout relativeViewPager =(RelativeLayout) findViewById(R.id.relativeViewPager);
        int relativeViewPagerHeight = layoutResize.height(70, displayMetrics);
        ViewGroup.LayoutParams viewPagerParams = relativeViewPager.getLayoutParams();
        viewPagerParams.height = relativeViewPagerHeight;
        relativeViewPager.setLayoutParams(viewPagerParams);


        RelativeLayout headerLayout =(RelativeLayout) findViewById(R.id.headerLayout);
        int headerLayoutHeight = layoutResize.height(70, displayMetrics);
        ViewGroup.LayoutParams headerLayoutParams = headerLayout.getLayoutParams();
        headerLayoutParams.height = headerLayoutHeight;
        headerLayout.setLayoutParams(headerLayoutParams);
}

它返回Attempt to invoke virtual method 'android.view.ViewGroup$LayoutParams android.widget.RelativeLayout.getLayoutParams()' on a null object reference

如果我只使用一次,例如:

RelativeLayout relativeViewPager =(RelativeLayout) findViewById(R.id.relativeViewPager);
            int relativeViewPagerHeight = layoutResize.height(70, displayMetrics);
            ViewGroup.LayoutParams viewPagerParams = relativeViewPager.getLayoutParams();
            viewPagerParams.height = relativeViewPagerHeight;
            relativeViewPager.setLayoutParams(viewPagerParams);

它可以工作,但是如果我像顯示兩次那樣使用它,則會拋出空對象引用。

ViewPager中項目的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" >

    <RelativeLayout
        android:id="@+id/headerLayout"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" >

        <ImageView
            android:id="@+id/slidingBackground"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true" />

        <RelativeLayout
            android:id="@+id/headerText"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/titleText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/messageText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_below="@+id/titleText" />

        </RelativeLayout>

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/slidingImageWrapper"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/headerLayout">

        <ImageView
            android:id="@+id/slidingImage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </RelativeLayout>


</RelativeLayout>

這是主類本身的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"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/relativeViewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:fillViewport="true"
        android:measureAllChildren="false"
        android:scrollbars="none" >

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentTop="true" />

    </RelativeLayout>



    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_below="@+id/relativeViewPager">

        <com.viewpagerindicator.CirclePageIndicator
            android:id="@+id/indicator"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="bottom"
            android:padding="10dip"
            app:centered="true"
            app:fillColor="#ff0099"
            app:pageColor="#FF0000"
            app:snap="false" />

        <Button
            android:id="@+id/loginButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Login"
            android:textColor="#ffffff"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="10dp"
            android:layout_marginBottom="10dp"
            android:background="@drawable/login_button" />

        <Button
            android:id="@+id/signUpButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Signup"
            android:textColor="#ffffff"
            android:layout_alignTop="@+id/loginButton"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_marginRight="63dp"
            android:layout_marginEnd="63dp"
            android:background="@drawable/signup_button" />

    </RelativeLayout>


</RelativeLayout>

我犯了一個愚蠢的錯誤,即沒有誇大我使用的視圖(我使用了另一個我忘了誇大的xml)

必須添加:

LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View pagerItemInflater = (View) inflater.inflate(R.layout.viewpager_item, null);

並像這樣使用它:

RelativeLayout headerLayout = (RelativeLayout) pagerItemInflater.findViewById(R.id.headerLayout);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM