Sử dụng ý định trong một ứng dụng Android để hiển thị một hoạt động khác


196

Trong ứng dụng Android của tôi, tôi có hai lớp hoạt động. Tôi có một nút trên cái đầu tiên và tôi muốn hiển thị cái thứ hai khi nó được bấm, nhưng tôi gặp lỗi. Dưới đây là các lớp:

public class FirstActivity extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button orderButton = (Button)findViewById(R.id.order);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        Intent intent = new Intent(FirstActivity.this, OrderScreen.class);
        startActivity(intent);
      }

    });
  }
}

Lớp thứ hai sẽ hiển thị khi nhấp vào nút, nhưng không bao giờ:

public class OrderScreen extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.order);

    Button orderButton = (Button) findViewById(R.id.end);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        finish();
      }

    });
  }
}

Làm cách nào để tạo một nút sẽ hiển thị hoạt động thứ hai?


Bạn có gặp lỗi khi biên dịch hoặc chạy thời gian không? Trong cả hai trường hợp, lỗi là gì?
Quintin Robinson

3
Đây là một lỗi thời gian chạy. Trình giả lập đưa ra lỗi chung "ứng dụng đã dừng đột ngột", nhưng khi sử dụng trình gỡ lỗi, nó đã hiển thị "android.content.ActivityNotFoundException: Không thể tìm thấy lớp hoạt động rõ ràng {tên lớp} bạn đã khai báo hoạt động này trong AndroidManifest.xml chưa?
Tai bình phương

8
Đây là một lỗi rất phổ biến mà mọi người quên thêm hoạt động của họ vào Manifest.xml nhưng cần có cách để tự động nhập nó.
AZ_

Câu trả lời:


177

Vấn đề là OrderScreen Activity không được thêm vào AndroidManifest.xml . Khi tôi thêm nó như là một nút ứng dụng, nó hoạt động đúng.

<activity android:name=".OrderScreen" />

Bạn có thể giải thích tại sao điều này là cần thiết?
Louis Rhys

@LouisRhys tất cả các hoạt động cần phải được khai báo trong tệp kê khai. Xem Descriptionphần tại đây: developer.android.com/guide/topics/manifest/
Kẻ

161

Thêm dòng này vào AndroidManifest.xml của bạn:

<activity android:name=".OrderScreen" /> 

7
Tại sao mọi người lại đưa ra câu trả lời này từ nhiều tháng sau?
Jaykul

4
@Jaykul xem bản chỉnh sửa từ năm 2013 trong câu trả lời được chấp nhận
pomber

16

---- FirstActivity.java -----

    package com.mindscripts.eid;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;

public class FirstActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button orderButton = (Button) findViewById(R.id.order);
    orderButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(FirstActivity.this,OrderScreen.class);
            startActivity(intent);
        }
    });

 }
}

--- OrderScreen.java ---

    package com.mindscripts.eid;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;



    public class OrderScreen extends Activity {
@Override



protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_class);
    Button orderButton = (Button) findViewById(R.id.end);
    orderButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            finish();
        }
    });

 }
}

--- AndroidManifest.xml ----

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.mindscripts.eid"
  android:versionCode="1"
  android:versionName="1.0">


<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".FirstActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".OrderScreen"></activity>
</application>


1
Bạn có thể muốn giải thích câu trả lời của mình vì lợi ích của OP
Luca

4

Sử dụng mã này:

Intent intent=new Intent(context,SecondActivty.class);
startActivity(intent);
finish();

bối cảnh: đề cập đến bối cảnh hoạt động hiện tại,

vui lòng đảm bảo rằng bạn đã thêm hoạt động trong tệp kê khai Android.

Mã sau để thêm hoạt động trong tệp kê khai Android

<Activity name=".SecondActivity">
</Activity>

java.lang.IllegalStateException: Fragment GetUserNumber {536bc00c} không được đính kèm với Activity.
Iman Marashi

4
<activity android:name="[packagename optional].ActivityClassName"></activity>

Chỉ cần thêm hoạt động mà chúng tôi muốn chuyển sang nên được đặt trong tệp kê khai


3

Khi bạn tạo bất kỳ hoạt động nào trong tệp Android, bạn phải chỉ định nó trong AndroidManifest.xml như

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".MyCreativityActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>


     <activity android:name=".OrderScreen"></activity>


</application>


3
b1 = (Button) findViewById(R.id.click_me);
        b1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(i);

            }
        });

Thêm lớp SecondActivity trong tệp tin đơn nhất của bạn.
Hiren Patel

Phương thức setOnClickListener (View.OnClickListener) trong loại Chế độ xem không áp dụng cho các đối số (OnClickListener mới () {})?

2

thêm hoạt động trong tệp kê khai của bạn

<activity android:name=".OrderScreen" />

2

Trong bản kê khai

<activity android:name=".OrderScreen" />

Trong Mã Java nơi bạn phải đặt mã ý định

startActivity(new Intent(CurrentActivity.this, OrderScreen.class);

1
Bạn đang thiếu một khung đóng trong startActivityNó sẽ như thế này:startActivity(new Intent(CurrentActivity.this, OrderScreen.class));
Lạ

1

bạn có thể sử dụng bối cảnh của chế độ xem đã thực hiện cuộc gọi. Thí dụ:

Button orderButton = (Button)findViewById(R.id.order);

orderButton.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View view) {
    Intent intent = new Intent(/*FirstActivity.this*/ view.getContext(), OrderScreen.class);
    startActivity(intent);
  }

});

Phương thức getContext () không được xác định cho kiểu MainActivity?

1
Intent i = new Intent("com.Android.SubActivity");
startActivity(i);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.