【问题标题】:How to call Custom Activity inside onCreate method如何在 onCreate 方法中调用自定义活动
【发布时间】:2020-11-21 00:09:16
【问题描述】:

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

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

  • 当用户点击No_button 时,SecondActivity 也会被调用,但不会同时调用 CustomActivity。

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

问题

当应用启动并且用户点击 No_button 时,将调用 SecondActivity 而不使用 CustomActivity(如预期的那样!),但只有一次用户 点击Yes_button,即使点击No_button,SecondActivity 也会继续显示在CustomActivity 旁边。

期待

我希望每次单击 Yes_button 时,在 CustomActivity 旁边调用 SecondActivity,并且在单击 No_button 时只调用 SecondActivity。

activity_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>

MainActivity.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>

SecondActivity.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>

CustomActivity.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();
            }
        });
    }
}

checking.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>

【问题讨论】:

  • 请将您的代码包装在两个“```”中

标签: java android android-studio dialog custom-activity


【解决方案1】:

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

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

SecondActivity.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();
    }
}

【讨论】:

  • 太棒了!它对我有用。我已经尝试解决这个问题几个星期了,但无济于事。我真的很感激你帮了我。你能帮我解释一下这行代码吗? int 输入 = v.getId() = = R.id.button1 ? 1:0;特别是这个? 1:0
  • 这是您的代码的较短版本。如果点击按钮的id是R.id.button1则返回1,否则(R.id.buttob2)返回0。最后将值赋给输入变量。
  • 如何通过三个按钮实现这一点。我试过这样做,但它不起作用。在 MainActivity button1、button2 和 button3 int input2 = v.getId() == R.id.button1? 1:0; int input2 = v.getId() == R.id.button1? 2:0; Intent ok = new Intent(Main.this, Second.class); ok.putExtra("input1", input1); ok.putExtra("input2", input2);开始活动(确定);在第二个活动中 int Input1= getIntent().getIntExtra("input1", 0); int Input2= getIntent().getIntExtra("input2",0); if(input1==1){custom.show();} else if(input2==2){custom.Cancel();} else{做一些其他的事情}
  • int 输入 = 0; if (v.getId() == R.id.button1) {input = 1;} else if (v.getId() == R.id.button2) {input = 2;} else {input = 3;}
  • 在 SecondActivity 中,如果 input = 1,则单击 button1。如果输入 = 2,则单击按钮 2。如果 input = 3,则单击 button3。
猜你喜欢
  • 2017-08-10
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多