0

我有 3 个 XML 文件。第一个用于主要活动。它有一个按钮。当我触摸此按钮时,它会起作用并将我发送到第二个 XML 文件。第二个屏幕也有一个按钮。现在,我想在这里做同样的操作,我想去第三个 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,另一个 Activity 永远不会启动,因此根据您想要执行的操作,您可以为每个按钮单击启动一个新的 Activity,或者您可以将b3Listener 移到里面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;
  }

});

第二种方式(在同一活动中重置内容视图)。我不推荐它,因为它使事情变得混乱并且违背了 Activity 应该是什么,但它仍然是一个(坏的)选项。

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 的 Listener 极其多余——它没有做任何有用的事情。

我建议重新考虑你想让你的代码做什么,并正确地重写它,因为这不是正确的结构。

于 2012-12-30T03:07:57.190 回答