我很难使用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文件。我在这做错了什么?
答案 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>