0

3つのXMLファイルがあります。最初のものは主な活動のためのものです。ボタンが1つあります。このボタンをタッチすると、機能し、2番目のXMLファイルに移動します。また、2番目の画面にはボタンがあります。ここで同じ操作を行い、3番目のXMLファイルに移動します。しかし、それは機能しません。

すべてのボタンに対して同じ手順を実行しました。私のせいはどこにあるのかわかりません。

MainPageActivity

public class MainPageActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_page);

    ImageButton b1 = (ImageButton) findViewById(R.id.button_compare);
    ImageButton b2 = (ImageButton) findViewById(R.id.button_find);
    b1.setOnTouchListener(new View.OnTouchListener(){
      @Override
      public boolean onTouch(View comparePage, MotionEvent event) {
        setContentView(R.layout.compare_pagee);
        return true;
      }

    });

    b2.setOnTouchListener(new View.OnTouchListener(){
      @Override
      public boolean onTouch(View findPage, MotionEvent event) {
        setContentView(R.layout.find_page);
        return true;
      }

    });

  }


  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main_page, menu);
    return true;
  }
}

activity_main_page.xml

<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"
tools:context=".MainPageActivity"
android:id="@+id/mainActivity" >
<ImageButton
android:id="@+id/button_compare"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_alignParentTop="false"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/compare"
/>
<ImageButton
android:id="@+id/button_find"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="69dp"
android:adjustViewBounds="true"
android:src="@drawable/find" 
/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center_vertical|center_horizontal"
android:text="Tap the top to Compare!"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/button_compare"
android:gravity="center_vertical|center_horizontal"
android:text="Tap the bottom to Find!"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

Compare

public class Compare extends Activity{

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.compare_pagee);


    ImageButton b3 = (ImageButton) findViewById(R.id.compareButton);
    b3.setOnTouchListener(new View.OnTouchListener(){
      @Override
      public boolean onTouch(View comparePage, MotionEvent event) {
        setContentView(R.layout.compare_pagee);
        return true;
      }

    });

  }
}

compare_pagee.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:background="@drawable/backgroundwallpaper"
android:clickable="true"
android:orientation="vertical"
tools:context=".Compare" >
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageButton
android:id="@+id/compareButton"
android:layout_width="139dp"
android:layout_height="74dp"
android:src="@drawable/comparebutton" />
<Spinner
android:id="@+id/spinner6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />

</LinearLayout>
4

1 に答える 1

1

新しいアクティビティを開始するのではなく、最初のアクティビティでレイアウトを切り替えるだけです。したがって、最初のボタンは、MainActivityでリスナーが割り当てられているため、機能します。ただしb3、これは開始されない別のアクティビティであるため、実行する内容に応じて、ボタンをクリックするたびに新しいアクティビティを開始するか、b3のリスナーを内部に移動できますMainActivity

最初の方法(新しい活動)

ImageButton b1 = (ImageButton) findViewById(R.id.button_compare);
ImageButton b2 = (ImageButton) findViewById(R.id.button_find);
b1.setOnTouchListener(new View.OnTouchListener(){
  @Override
  public boolean onTouch(View comparePage, MotionEvent event) {
    startIntent (new Intent (MainPageActivity.this, Compare.class));
    return true;
  }

});

b2.setOnTouchListener(new View.OnTouchListener(){
  @Override
  public boolean onTouch(View findPage, MotionEvent event) {
    startIntent (new Intent (MainPageActivity.this, Find.class));//You will NEED to make a new Activity called Find.
    return true;
  }

});

2番目の方法(同じアクティビティのコンテンツビューをリセットする)。それは物事を乱雑にし、アクティビティのあるべき姿に反するので、私はそれをお勧めしませんが、それでも(悪い)オプションです。

ImageButton b1 = (ImageButton) findViewById(R.id.button_compare);
ImageButton b2 = (ImageButton) findViewById(R.id.button_find);
b1.setOnTouchListener(new View.OnTouchListener(){
  @Override
  public boolean onTouch(View comparePage, MotionEvent event) {
    setContentView(R.layout.compare_pagee);
    ImageButton b3 = (ImageButton) findViewById(R.id.compareButton);
    b3.setOnTouchListener(new View.OnTouchListener(){
      @Override
      public boolean onTouch(View comparePage, MotionEvent event) {
        setContentView(R.layout.compare_pagee);
        return true;
      }

    });
    return true;
  }

});

b2.setOnTouchListener(new View.OnTouchListener(){
  @Override
  public boolean onTouch(View findPage, MotionEvent event) {
    setContentView(R.layout.find_page);
    return true;
  }

});

}

ご覧のとおり、b3のリスナーは非常に冗長です。何も役に立ちません。

これは適切な構造ではないため、コードに何をさせたいかを再考し、適切に書き直すことをお勧めします。

于 2012-12-30T03:07:57.190 に答える