未在Android应用中启动的新活动

时间:2016-08-05 18:37:28

标签: android android-studio android-activity

我正在尝试按下按钮启动新活动。我在我的申请中的不同地方这样做。用户登录系统时的第一个。 我正在使用以下代码打开新活动:

 btnSignIn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Check if Name text control is not empty
            if (etUserName.getText().length() != 0 && etPassword.getText().toString() != "") {
//code to check login is correct or not
                Context ctx = v.getContext();
                Intent intent = new Intent(ctx, DashboardActivity.class);
                ctx.startActivity(intent);

            } else {
               // tv.setText("Please enter name");
            }
        }
    });

这样可以正常工作并打开DashboardActivity。在这个新的屏幕上,我有三个按钮,点击每个按钮,一个新的活动开始..其中一个按钮的代码如下:

btnMyActivity = (Button) findViewById(R.id.btnMyActivity);
        btnFarmerStatus = (Button) findViewById(R.id.btnFarmerStatus);
        btnMeetings = (Button) findViewById(R.id.btnMeetings);



        btnMyActivity.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Check if Name text control is not empty
                Context ctx =  v.getContext();
                Intent intent = new Intent(v.getContext(), MyactivityActivity.class);
                ctx.startActivity(intent);
            }
        });

清单xml就像:

<activity  android:name=".DashboardActivity"  android:screenOrientation="portrait" />
    <activity  android:name=".MyactivityActivity"  android:screenOrientation="portrait" />
    <activity  android:name=".FarmerstatusActivity"  android:screenOrientation="portrait" />

不知何故,代码是相同的,但第二次新活动没有打开。事实上,屏幕上没有任何反应。我的代码有什么问题?

更新 当DashboardActivity打开logcat时显示:

  

08-05 15:33:04.880 3073-3073 / com.it.allied.ots_dashboard I / Choreographer:跳过55帧!应用程序可能在其主线程上做了太多工作。   08-05 15:33:05.279 3073-3138 / com.it.allied.ots_dashboard E / Surface:getSlotFromBufferLocked:未知缓冲区:0xabda5950

以下是Myactivityactivity类的代码

public class MyactivityActivity extends AppCompatActivity {

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

@Override
protected void onStart() {
    super.onStart();

    setContentView(R.layout.activity_myactivity);
}

}

6 个答案:

答案 0 :(得分:0)

btnMyActivity = (Button) findViewById(R.id.btnMyActivity);
    btnFarmerStatus = (Button) findViewById(R.id.btnFarmerStatus);
    btnMeetings = (Button) findViewById(R.id.btnMeetings);

    btnMyActivity.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Check if Name text control is not empty
            Intent intent = new Intent(context, MyactivityActivity.class);
            startActivity(intent);
        }
    });

我认为这会对你有所帮助。

答案 1 :(得分:0)

第一个解决方案:在您的活动中定义Context context;,在活动的onCreate()方法中定义context = this;

btnMyActivity.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
               Intent intent = new Intent(context, MyactivityActivity.class);
                startActivity(intent);
            }
        });

 btnSignIn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Check if Name text control is not empty
            if (etUserName.getText().length() != 0 && !(etPassword.getText().toString().equals(""))) {
//code to check login is correct or not
                Intent intent = new Intent(context, DashboardActivity.class);
                startActivity(intent);

            } else {
               // tv.setText("Please enter name");
            }
        }
    });

第二个解决方案:如果您不想使用context,只需将context中的Intent替换为yourActivity.this即可。

Intent intent = new Intent(MyactivityActivity.this, DashboardActivity.class);
startActivity(intent);

答案 2 :(得分:0)

我想你检查一下

 btnSignIn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

        if (etUserName.getText().length() != 0 && !(etPassword.getText().toString().equals(""))) {
            Context ctx = v.getContext();
            Intent intent = new Intent(ctx, DashboardActivity.class);
            ctx.startActivity(intent);

        } else {
           // tv.setText("Please enter name");
        }
    }
});

答案 3 :(得分:0)

我认为这是Android 6.0的问题。我试图更新Android模拟器,它无法正常工作。我正在为Android模拟器问题开始一个新线程。

答案 4 :(得分:0)

我遇到了完全相同的问题。我发现我在xml文件中编写了ListView而不是LinearLayout。始终检查您在 xml 中使用的布局,问题仅存在于此。

答案 5 :(得分:-1)

似乎这里的其他答案并没有帮助你。试试这个:

创建Intent的另一种方法是使用AndroidManifest.xml文件。

<强>步骤:

1)打开AndroidManifest.xml文件并转到:

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

2)现在使用这样的intent-filter标签:

<activity android:name=".MyactivityActivity">
    <intent-filter>

    </intent-filter>
</activity>

3)更改动作名称,例如:

<action android:name="AnythingOfYourChoice" />

(但没有空间) 编写动作名称的理想方式如下:

<action android:name="packagename.ActivityName" />

4)更改类别名称,例如:

<category android:name="android.intent.category.DEFAULT" />

5)然后使用隐含意图

Intent i = new Intent("packagename.ActivityName");
startActivity(i);

这可以解决您的问题。