android:无法在使用intent的活动之间切换

时间:2013-04-27 21:47:00

标签: android button android-intent android-activity

我很难使用intent从一个活动切换到另一个活动。我的应用程序差不多完成了,我有几个活动,我可以在意图之间切换它们。我在我的项目中添加了一个活动(在Eclipse中:File ... New ... AndroidActivity)。就像我习惯的那样,它创建了.java和.xml文件。在我的主要活动中,我已经定义了我的按钮(xml)和java类方法来执行buttonClick。一切似乎都很好,但当我点击我的按钮时没有任何反应。可能有什么不对?

这里定义了我的主要活动类叫做“Ponuka”:

package com.example.s_home;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class Ponuka extends Activity  {

@Override
public void onCreate(Bundle savedInstanceState) {
    getWindow().setBackgroundDrawableResource(R.drawable.pozadie);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ponuka);
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_ponuka, menu);
    return true;
}

// switch to activity: Osvetlenie  --- works fine
public void obrOsv(View view) {
    Intent intent = new Intent (this, Osvetlenie.class);
    startActivity(intent);  
}

 // switch to activity: Kurenie   --- works fine
 public void obrKur(View view) {
    Intent intent = new Intent (this, Kurenie.class);
    startActivity(intent);
}

 // switch to activity: Ochrana   --- this isnt working
 public void obrBez(View view) {
    Intent intent = new Intent (this, Ochrana.class);
    startActivity(intent);
 System.out.println("ok");           // It will not even print out "ok" 
}

}

这是activity_ponuka.xml:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="150dp"
>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/lin1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
>

<Button
     android:id="@+id/bezpecnost"              <!-- THIS IS THE BUTTON -->
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/zabezp"
      android:onClick="obrBez"

      />

<Button
    android:id="@+id/kuren"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
   android:layout_marginLeft="10dp"
    android:background="@drawable/kurenie"

    android:onClick="obrKur" />

 </LinearLayout>

 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/lin2"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="90dp"
     android:gravity="center"
     android:orientation="horizontal" >

  <Button
    android:id="@+id/osvetl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/osvetlenie"
    android:onClick="obrOsv"

        />

   <Button
    android:id="@+id/pohod"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/pohodlie"
    android:layout_marginLeft="10dp"

     />
     </LinearLayout>
 </RelativeLayout>

还有一点需要注意:当我创建了名为“Ochrana”的新活动时,我不得不手动更新R.java文件。我在这做错了什么?

6 个答案:

答案 0 :(得分:0)

您不应在Android上使用System.out.println,而是使用Log类记录消息,然后您可以在LogCat中找到它。 System.out.println也可能被重定向到LogCat,但不能保证。 Why doesn't "System.out.println" work in Android?

您的问题是它启动的活动与您想要的不同,还是根本不启动?因为您使用Kurenie.class创建了一个意图,您显然希望启动Ochrana活动(根据obrBez()方法上方的评论)。

PS:Zdravim z Brna。 :)

答案 1 :(得分:0)

您永远不应手动更新R.java,因为如果您的代码正确,它会自动更新。

您还需要在活动中获取按钮的实例,并添加一个OnClickListener来调用切换活动的方法。

您需要做的最后一件事是在清单文件中添加要使用的活动。

答案 2 :(得分:0)

可能与您的问题无关,但您在新按钮事件中调用错误的活动:

public void obrBez(View view) {
    Intent intent = new Intent (this, Kurenie.class);

答案 3 :(得分:0)

我建议使用setOnClickListener()作为按钮,而不是XML中的android:onClick - XML用于布局和设计以及用于逻辑的java活动文件,将两者混合会造成混淆。您也可以尝试解决问题(虽然我没有看到您的代码有任何问题):

Button btn = (Button) findViewById(R.id.bezpecnost);
btn.setOnClickListener(new OnClickListener() {
    @Override
        public void onClick(View v) {
             //Assuming you want Ochrana activity from your comment
             Intent intent = new Intent (this, Ochrana.class); 
             startActivity(intent);
        }
    });

还有两件事情无法解决您的问题,但可能对您有所帮助: 您可能希望为整个活动类定义Intent intent;,而不是在同一变量上创建新意图以节省内存分配。 最后一件事 - 给你的XML文件[Ctrl] + A而不是[Ctrl] + i自动命令间距 - 它只做好(:

P.S。 如果您的R文件有任何问题 - 只需删除它! Eclipse自动重新创建它 - 解决各种R坏/未更新......

答案 4 :(得分:0)

答案在你的XML布局中....仔细看......

<Button
     android:id="@+id/bezpecnost"              <!-- THIS IS THE BUTTON -->
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/zabezp"
      android:onClick="obrBez"

      />

评论应该采用这种格式<!-- .... //-->

你遗漏了两个正斜杠 - 这就是为什么没有发生的事情!

修改

Eclipse会以绿色突出显示整个块的注释,而不是XML语法高亮颜色!

关于R.java - 在编译时生成的,因此每当您对XML布局进行更改时,Android SDK都会每次重新生成R.java文件!

AndroidManifest.xml应该在标记application中指定活动的行,如:

<activity android:name="com.example.s_home.Ochrana" 
          android:label="Ochrana Activity"/>

答案 5 :(得分:0)

你的xml都错了。您的按钮带有&#34; @ + id / pohod&#34;与按钮混合&#34; @ + id / bezpecnost&#34;因为您错过了第二个线性布局中的android:layout_below="@id/lin1"。我测试了下面的布局,没关系。我改为android:text,因为我没有drawable

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="150dp"
>

<LinearLayout 
android:id="@+id/lin1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
>

<Button
     android:id="@+id/bezpecnost"             
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Ochrana"
      android:onClick="obrBez"

      />

<Button
    android:id="@+id/kuren"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
   android:layout_marginLeft="10dp"
    android:text="Kurenie"

    android:onClick="obrKur" />

 </LinearLayout>

 <LinearLayout

     android:id="@+id/lin2"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="90dp"
     android:gravity="center"
     android:layout_below="@id/lin1"
     android:orientation="horizontal" >

  <Button
    android:id="@+id/osvetl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="osvetlenie"
    android:onClick="obrOsv"

        />

   <Button
    android:id="@+id/pohod"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="pohodlie"
    android:layout_marginLeft="10dp"

     />
     </LinearLayout>
 </RelativeLayout>