如何使用自定义视图按钮打开单独的新活动

问题描述 投票:0回答:1

我的

MainActivity
有一个 Add 按钮,单击该按钮会创建我的自定义视图的新实例:(https://i.stack.imgur.com/M3Uxe.png)

在其角落,我的自定义视图有一个图像按钮,应该打开新活动,列表中的每个自定义视图都应该打开自己的新活动(如果我的主要活动中有 3 个视图,它们应该打开 3 个不同的新活动)。

如何在每次添加自定义视图时创建一个新活动,然后在按下按钮时能够打开该新活动?

主要活动:

package com.example.teacherplanner;

import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

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

        ImageButton AddNewWeek= findViewById(R.id.add_week_btn);
        LinearLayout WeekWindow = findViewById(R.id.LIST_OF_WEEKS);


        AddNewWeek.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                WeekThumbnail NewWeek = new WeekThumbnail(MainActivity.this);
                WeekWindow.addView(NewWeek);
            }
        });

    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(R.layout.layout_week);

        ImageButton OpenEditing = findViewById(R.id.WEEK_SETTINGS);


        OpenEditing.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                openWeekEditing();
            }
        });

    }

    public void openWeekEditing() {
        Intent intent = new Intent(this, WeekEditing.class);
        startActivity(intent);
    }
}

自定义查看java文件:

package com.example.teacherplanner;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.LayoutDirection;
import android.view.LayoutInflater;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintSet;

public class WeekThumbnail extends RelativeLayout {
    public WeekThumbnail(Context context) {
        super(context);
        init(context);
    }

    public WeekThumbnail(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public WeekThumbnail(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    private void init(Context context) {
        LayoutInflater inflater = LayoutInflater.from(context);
        inflater.inflate(R.layout.layout_week, this, true);
    }
}

我的自定义视图与 java 文件绑定,我尝试将单击操作放在那里,但它不起作用,当我每次单击它时将其放入主要活动时,应用程序都会崩溃。

java android button android-custom-view
1个回答
0
投票

如何在每次添加自定义视图时创建一个新活动,然后在按下按钮时能够打开该新活动?

如果您的视图应该打开完全不同的活动,那么您应该创建三个不同的活动,它们将为指定视图显示适当的内容。但是,如果活动应该具有相同的外观,但它们之间只有数据不同,那么您应该有单个活动,并在创建时使用意图额外机制将数据传递给它。例如:

Intent intent = new Intent(context, WeekEditing.class);
intent.putExtra("key", value);
context.startActivity(intent);

value 是每个视图的不同数据,在您的 Activity 中,您可以使用 onCreate 访问此数据:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("key");
}

我不确定什么会导致您的应用程序崩溃,有关使用活动的更多详细信息,请参见此处:https://developer.android.com/guide/components/activities/intro-activities

© www.soinside.com 2019 - 2024. All rights reserved.