簡體   English   中英

當 class 擴展 LinearLayout 時,如何將 class 作為 Activity 調用

[英]How to call class as an Activity when class has extends LinearLayout

正如我的標題所說,我的應用程序在 Android 工作室(JAVA)中遇到問題,當 class 擴展 LinearLayout 時,如何將 class 作為 Activity 調用?

我的 class 是: public class CustomCalendar extends LinearLayout {

我嘗試調用它的代碼:

 Intent customCalendar = new Intent(MainActivity.this, CustomCalendarActivity.class);
 startActivity(customCalendar);

我試圖做到這一點:

 public class CustomCalendarActivity extends AppCompatActivity {


    CustomCalendar customCalendar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        customCalendar = (CustomCalendar) findViewById(R.id.kalendoriaus_virsus);
        customCalendar.SetUpCalendar();
    }
}

我的崩潰是這樣的:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.kalendorius.CustomCalendar.SetUpCalendar()' on a null object reference
        at com.example.kalendorius.MainActivity$2.onClick(MainActivity.java:75)

75線是:

 startActivity(customCalendar);

我如何設置我的日歷:

我的 kalendorius.xml:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/soft_blue_green"
        android:orientation="horizontal"
        android:paddingTop="8dp"
        android:paddingBottom="8dp">

        <ImageButton
            android:id="@+id/atgalBtn"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_margin="10dp"
            android:background="@drawable/back" />

        <TextView
            android:id="@+id/dabartineData"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"
            android:layout_weight="3"
            android:gravity="center"
            android:text="Data"
            android:textColor="#ffffff"
            android:textSize="18sp"
            android:textStyle="bold" />

這只是我使用 kalendorius_virsus 的一些代碼。

完畢。 我弄清楚是什么問題。 我只是忘記為數據庫構造函數生成:D 感謝所有試圖提供幫助的人。

問題是 customCalendar = (CustomCalendar) findViewById(R.id.kalendriaus_virsus);

kalendorias.xml 中 ID 為 kalendorias_virsus 的 groupView LinearLayout 不是 CustomCalendar,因此始終返回 null。

您需要了解如何正確使用服裝視圖

基本示例 CustomView ->

public class CustomView extends LinearLayout {

    public CustomView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        View view =  LayoutInflater.from(getContext()).inflate(
                R.layout.costum, null);

        this.addView(view);
    }

    public void setCustomText(String text){
        TextView textview = (TextView) findViewById(R.id.textViewId);
        textview.setText(text);
    }
}

布局自定義.xml ->

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textViewId"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/app_name"
        android:gravity="center">

    </TextView>
</LinearLayout>

活動.xml->

<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

    <com.example.myapplication.CustomView
        android:id="@+id/customViewId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

MainActivity 類->

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CustomView customView = findViewById(R.id.customViewId);
        customView.setCustomText("Welcome ");
    }
}

您的代碼中有很多錯誤。 我們仍然需要更多信息來確定您在MainActivity.onClick()方法中獲得NullPointerException (NPE) 的原因。 但是,這肯定會崩潰:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    customCalendar = (CustomCalendar) findViewById(R.id.kalendoriaus_virsus);
    customCalendar.SetUpCalendar();
}

因為customCalendar將是null因為您在調用findBiewById() setContentView() ) 。

您需要添加

    setContentView(R.layout.XXXXXX);

在調用findViewById()之前。 上面的XXXXXX必須是您的布局 XML 文件的名稱(沒有.xml文件擴展名)。

暫無
暫無

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

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