繁体   English   中英

如何在 onCreate 方法中调用自定义活动

[英]How to call Custom Activity inside onCreate method

我正在开发一个简单的应用程序,它有两个活动,MainActivity 和 SecondActivity,以及一个扩展 Dialog 的透明 CustomActivity。 MainActivity 有两个按钮( Yes_buttonNo_button )。

  • 当用户点击Yes_button ,SecondActivity 将通过 Intent 调用,CustomActivity 将在它前面。

  • 当用户单击No_button ,SecondActivity 也将被调用,但 CustomActivity 不会与它一起调用。

CustomActivity 的调用基于 if-else 语句表达式。 CustomActivity 有一个跳过按钮,单击时 CustomActivity 将关闭,然后用户才能访问 SecondActivity。 SecondActivity 只有一个按钮调用 MainActivity 并且循环继续。

问题

当应用程序启动并在用户点击No_button ,该SecondActivity将不CustomActivity调用(如预期!),但是一旦在用户点击Yes_button ,该SecondActivity将继续显示沿着即使CustomActivity No_button点击.

期待

我希望每次单击 Yes_button 时都将No_button与 CustomActivity 一起调用, Yes_button在单击 No_button 时也只调用No_button

活动_main.xml

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

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

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1" />

</RelativeLayout>

主活动.java

public class MainActivity extends BaseActivity implements View.OnClickListener {

    private static int getNumber;
    Button Yes_button;
    Button No_button;

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

        Yes_button = findViewById(R.id.button1);
        No_button = findViewById(R.id.button2);
        Yes_button.setOnClickListener(this);
        No_button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button1:
                int get_input = 1;  // will be use in if else statement.
                getNumber = get_input;
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
                break;
            case R.id.button2:
                Intent intent2 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent2);
                break;

        }
    }

    public static int get_Logic() {
        return getNumber;
    }
}

activity_second_activity.xml

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

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

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text"
        android:onClick="Click"
        android:text="Click" />

</RelativeLayout>

第二个Activity.java

public class SecondActivity extends AppCompatActivity {

    private static int output;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second_activity);
        int received = MainActivity.get_Logic();
        output = received;
        Display();
    }

    public final void Display() {
        if (output == 1) {
            CustomActivity custom = new CustomActivity(SecondActivity.this);
            custom.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            custom.show();
        } else {
            CustomActivity custom = new CustomActivity(SecondActivity.this);
            custom.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            custom.cancel();
        }

    }

    public void Click(View view) {
        Intent intent = new Intent(SecondActivity.this, MainActivity.class);
        startActivity(intent);
    }
}

activity_custom_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="180dp"
    android:layout_height="250dp"
    xml:toos="http://schemas.android.com/tools">

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

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text"
        android:text="Skip" />

</RelativeLayout>

自定义活动.java

class CustomActivity extends Dialog {

    Button SkipButton;
    private Activity main;

    public CustomActivity(Activity constr) {
        super(constr);
        this.main = constr;
    }

    @Override
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setCancelable(false);
        setContentView(R.layout.activity_custom_activity);
        SkipButton = findViewById(R.id.button);
        SkipButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
    }
}

检查.xml

<?XML version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="#FFFF" />
            <corners android:radius="20dp" />
            <stroke android:width="4dp" android:color="@color/colorPrimary" />
            <gradient />
        </shape>
    </item>
</selector>

在 Android 中,要将数据从一个活动传递到另一个活动,您不需要声明静态变量(MainActivity 中的getNumber ),您应该一起使用 Intent 和 Bundle。 请参阅以下解决方案。

主活动.java

public class MainActivity extends BaseActivity implements View.OnClickListener {

    Button Yes_button;
    Button No_button;

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

        Yes_button = findViewById(R.id.button1);
        No_button = findViewById(R.id.button2);
        Yes_button.setOnClickListener(this);
        No_button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int input = v.getId() == R.id.button1 ? 1 : 0;
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        intent.putExtra("input", input);
        startActivity(intent);
    }
}

第二个Activity.java

public class SecondActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second_activity);
        Display();
    }

    public final void Display() {
        int input = getIntent().getIntExtra("input", 0);
        CustomActivity custom = new CustomActivity(SecondActivity.this);
        custom.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        if (input == 1) {
            custom.show();
        } else {
            custom.cancel();
        }
    }

    public void Click(View view) {
        finish();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM