【问题标题】:Android intents won't start the next activitiesAndroid Intent 不会启动下一个活动
【发布时间】:2016-06-22 23:51:55
【问题描述】:

应用及问题描述 我们正在尝试创建一个基于文本的 android 游戏(不要问 ;-)),但由于某种原因,我们无法通过意图启动新活动。我们的游戏从欢迎屏幕开始--> 新游戏(按钮)--> 类别选择(两个按钮,侦探/凶手)--> 第一个游戏活动

游戏内活动将包含一个图像视图、一个文本视图、一个继续按钮(导致下一个活动)和最常见的后退按钮(布尔值,取决于游戏/故事上下文)。

问题是,即使我们使用与从菜单到第一个游戏活动几乎相同的代码,我们也无法获得继续按钮来开始下一个活动?我们的想法是,我们同时拥有布局模板和内容模板,并且我们可以创建新的活动,我们只需为图片资源、字符串资源、后退按钮的布尔值和以下活动设置变量以“继续”开始。

代码 这是我们的代码:

内容模板:

package com.bsnoire;

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;
import android.widget.ImageView;
import android.widget.TextView;

public class ContentTemplate extends Activity implements OnClickListener
{
protected int image, back, text;
protected Class<? extends Activity> cls;

@Override
public void onCreate(Bundle savedInstanceState)
{
    setVariables();

    super.onCreate(savedInstanceState);
    setContentView(R.layout.content);

    ImageView iv = (ImageView) findViewById(R.id.contentImageView);
    TextView tv = (TextView) findViewById(R.id.contentTextView);
    Button bBack = (Button) findViewById(R.id.contentbBack);

    iv.setImageResource(image);
    tv.setText(text);
    bBack.setVisibility(back);
}



@Override
public void onDestroy()
{
    this.finish();
}

//===============================================================================

@Override
public void onClick(View v) 
{
    switch(v.getId())
    {
    case R.id.contentbBack:
        this.finish();
        break;

    case R.id.contentbCon:
        Intent intent1 = new Intent(this, cls);
        startActivity(intent1);
        break;


    }
}

public void setVariables() 
{

}

}

Act1(即活动 1)

package com.bsnoire;

import com.bsnoire.R;

import android.app.Activity;
import android.os.Bundle;

public class Act1 extends ContentTemplate 
{


/**
 * Sets the variables in Act1
 */
@Override
public void setVariables()
{

    image = R.drawable.p1;
    back = 0;
    text = R.string.A1S1;
    cls = com.bsnoire.Act2.class;
}

}

Act2 将与 1 相同,但具有其他变量。在菜单中,我们使用以下代码(switch-function)引用Act1:

case R.id.bAbout:
Intent intent2 = new Intent(MainMenu.this, Act1.class);
startActivity(intent2);
break;

哪个有效!

我们没有收到任何编译错误,也没有运行时错误。在 Act1 中按“继续”时没有任何反应,除了手指点击时的绿色标记。

【问题讨论】:

  • 我应该提到,我们已经尝试对 Act1 和 Act2 进行硬编码(删除我们只需设置变量并重复所有内容的“通用”方面)。这会导致 Act1 中完全相同的停顿。
  • 将 OnClickListener 添加到您的按钮...,我认为您必须添加 Log 以查看是否正在调用您的 onClick。
  • 谢谢,但是试了之后还是没有用。此外,日志消息不会显示在 logcat 中,只有一些标准消息:“onTouchEvent”。我们发现这很奇怪,因为设备注册了触摸输入,但不会写入我们的日志,该日志位于声明意图并发送到侦听器之前。 (我们使用命令 Log.d("BSNoire", "Continue button clicked"))

标签: android templates android-intent android-activity


【解决方案1】:

也许这会有所帮助:

  1. Button bCon = (Button) findViewById(R.id.contentbCon);

  2. bCon.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent newscr = new Intent(ContentTemplate.this, NextClassYouWantToShow.class); startActivity(newscr); } });

【讨论】:

  • 谢谢,zkminusck,你和 #0 的 cmets 中的 Anis 有同样的想法。可悲的是,它没有用。没有任何改变,没有新的错误。
【解决方案2】:

我是 android 和 Android Studio 的新手,但我遇到了类似的问题,但我能够解决。我不知道我的解决方案如何或为什么起作用,只知道它在我的情况下起作用。我有一些活动开始得很好,而另一些则没有。我注意到所有开始正常的活动都有 onCreate 方法,只有一个 Bundle 作为输入,

 protected void onCreate(Bundle savedInstanceState){
     ...
 }

虽然没有启动的活动都是具有onCreate 方法的所有 ListActivities,但这些方法带有 BundlePersistableBundle

public void onCreate(Bundle savedInstanceState, PersistableBundle persistedState){
  ...
}

我使用 Android Studio 自动完成我的所有 onCreate 方法,所以我不知道为什么它们的自动完成方式不同。但是,当我从非启动 onCreate 方法中删除 PersistableBundle 时,活动开始了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多