[英]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.