【问题标题】:How to call class as an Activity when class has extends LinearLayout当类扩展了 LinearLayout 时如何将类称为 Activity
【发布时间】:2020-06-17 19:10:00
【问题描述】:

正如我的标题所说,我的应用程序在 Android Studio (JAVA) 中遇到问题,当类扩展 LinearLayout 时,如何将类作为 Activity 调用?

我的班级是: 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 感谢所有试图提供帮助的人。

【问题讨论】:

  • 检查 kalendriaus_virsus 是 XML 中的 id。您可能需要添加 XML 和更多代码。错误可能是由于 customCalendar 为 null 然后调用 setupcalendar();
  • 您是否在onCreate()Activity 中致电setContentView()?您需要这样做来告诉 Activity 要使用哪个布局 XML 文件。
  • 哪一项活动?在我调用 CustomCalendar 的 MainActivity 中?
  • 不,在CustomCalendarActivity
  • 但看起来崩溃发生在 MainActivity 中的 onClick() 方法中。请将该方法的代码(包括第 75 行)添加到您的问题中(只需编辑问题)

标签: java android class android-activity crash


【解决方案1】:

问题是 customCalendar = (CustomCalendar) findViewById(R.id.kalendoriaus_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);
    }
}

布局 custom.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>

activity.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 ");
    }
}

【讨论】:

  • 你是那个意思吗? 检查我的答案
  • 我之前尝试过,但它仍然为空。. CustomCalendar customCalendar = findViewById(R.id.kalendoriaus_virsus); customCalendar.SetUpCalendar();
  • 你需要在布局 "kalendorius".xml 文件中放入类似这样的 并且您需要确保覆盖 CustomCalendar.class 上的方法 public CustomCalendar(Context context, @Nullable AttributeSet attrs) 才能工作。见上面的例子
  • 我有那个。我刚刚添加了一些 kalendorius xml 代码
【解决方案2】:

您的代码中有很多错误。我们仍然需要更多信息来确定您在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 文件扩展名)。

【讨论】:

  • 添加后出现此错误:java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to com.example.kalendorius.CustomCalendar at com.example.kalendorius.MainActivity$2.onClick (MainActivity.java:73)
  • 是的,因为在布局 XML 文件中,您有一个用 id=kalendoriaus_virsus 声明的 LinearLayout,而不是 CustomCalender。如果您想使用CustomCalendar 而不是LinearLayout,那么您需要在XML 文件中声明它。而不是使用&lt;LinearLayout&gt;,你应该在你的布局文件中使用&lt;com.example.kalendorius.CustomCalendar&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多