1

インテントを使用して、あるアクティビティから別のアクティビティに切り替えるのに苦労しています。私のアプリはほぼ完成しています。いくつかのアクティビティがあり、それらを意図的に切り替えることができます。プロジェクトにもう 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>

もう 1 つ注意: 「Ochrana」という新しいアクティビティが作成されたとき、R.java ファイルを手動で更新する必要がありました。ここで何が間違っていましたか?

4

6 に答える 6

0

Android では使用System.out.printlnしないでください。クラスを使用してメッセージをログに記録するLogと、LogCat で見つけることができます。System.out.printlnLogCat にもリダイレクトされる可能性がありますが、保証されていません。「System.out.println」が Android で機能しないのはなぜですか?

あなたの問題は、あなたが望むものとは異なる活動を開始することですか、それともまったく開始しないことですか? Kurenie.class明らかにアクティビティを開始したい場所でインテントを作成しているためですOchrana(メソッドの上のコメントによるとobrBez())。

PS: Zdravim z Brna. :)

于 2013-04-27T21:57:24.703 に答える
0

コードが正しい場合、R.java は自動的に更新されるため、R.java を手動で更新しないでください。

また、アクティビティでボタンのインスタンスを取得し、アクティビティを切り替えるメソッドを呼び出す OnClickListener を追加する必要があります。

最後に、使用するアクティビティをマニフェスト ファイルに追加する必要があります。

于 2013-04-27T21:58:41.950 に答える
0

おそらく問題とは関係ありませんが、新しいボタンイベントで間違ったアクティビティを呼び出しています:

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

setOnClickListener()XMLの代わりにボタンに使用することをお勧めしandroid:onClickます。XML はレイアウトとデザインに、Java アクティビティ ファイルはロジックに使用されます。この 2 つを混在させると混乱が生じる可能性があります。問題を解決するためにそれを試すこともできます(ただし、コードに問題はありません):

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);
        }
    });

問題を解決するわけではありませんが、役立つ可能性のある2つのこと:Intent intent;アクティビティクラス全体を定義し、同じ変数に新しいインテントを作成して、メモリの割り当てを節約することをお勧めします。最後に、XML ファイルに [Ctrl]+A を指定し、[Ctrl]+i よりも間隔を自動的に並べ替えるようにします。

PS R ファイルに問題がある場合は、削除してください。Eclipseはすぐに自動再作成します-あらゆる種類のRの悪い/更新されていない問題を解決します...

于 2013-04-27T22:15:07.140 に答える