1

我很难使用意图从一项活动切换到另一项活动。我的应用程序快完成了,我有几个活动,我可以有意识地在它们之间切换。我在我的项目中添加了一项活动(在 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 文件。我在这里做错了什么?

4

6 回答 6

0

xml全错了。您的“@+id/pohod”按钮与“@+id/bezpecnost”按钮混在一起,因为您错过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>
于 2013-04-27T22:51:47.050 回答
0

我建议使用setOnClickListener()按钮而不是android:onClickXML - XML ment 用于布局和设计,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 自动排序间距 - 它只会有好处(:

PS 如果您的 R 文件有任何问题 - 只需将其删除!Eclipse 会立即自动重新创建它 - 解决各种 R 错误/未更新...

于 2013-04-27T22:15:07.140 回答
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 SDKR.java每次都会重新生成文件!

AndroidManifest.xml应该有在 tags 中指定活动的行,application如下所示:

<activity android:name="com.example.s_home.Ochrana" 
          android:label="Ochrana Activity"/>
于 2013-04-27T22:17:28.633 回答
0

你不应该System.out.println在 Android 上使用,而是使用Log类记录消息,然后你可以在 LogCat 中找到它。System.out.println也可能会被重定向到 LogCat,但不能保证。为什么“System.out.println”在 Android 中不起作用?

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

PS:Zdravim z Brna。:)

于 2013-04-27T21:57:24.703 回答
0

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

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

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

于 2013-04-27T21:58:41.950 回答
0

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

public void obrBez(View view) {
    Intent intent = new Intent (this, Kurenie.class);
于 2013-04-27T21:59:38.580 回答