2014-04-14 93 views
0

我已成功地使用ImageButton以及與.setOnClickListener綁定的兩個活動,我還包括具有不同ImageButton的佈局。每個按鈕啓動一個活動。我創建了這些活動。我還設法卸載崩潰錯誤,lint錯誤,擁有最新的Android SDK。但是現在,即使聽到咔嗒聲,按鈕也停止工作。這兩項活動都不會在第一張圖片按鈕上啓動,也不會在第二張圖片按鈕上啓動。帶有setOnClickListener的多個ImageButtons(點擊但不會啓動活動)

發生這種情況時,我把多個ImageButtons。它與1按鈕的作品。我懷疑班上的(這個)命令對於要調用什麼感到困惑。我的意圖調用方法開始新的活動是簡化和基本的快速,簡單的訪問。

有人可以幫我,爲什麼多個setOnclickListener不能綁定到相關的imageButtons嗎?

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.content.Intent; 
import android.view.View.OnClickListener; 
import android.widget.ImageButton; 

public class MainActivity extends ActionBarActivity implements OnClickListener { 
ImageButton imageButton1; 
ImageButton imageButton2; 
ImageButton imageButton3; 
ImageButton imageButton4; 
Intent intent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.reusable_layout); 
    imageButton1=(ImageButton)findViewById(R.id.imageButton1); 
    imageButton2=(ImageButton)findViewById(R.id.imageButton2); 
    imageButton3=(ImageButton)findViewById(R.id.imageButton3); 
    imageButton4=(ImageButton)findViewById(R.id.imageButton4); 

    imageButton1.setOnClickListener(this); 
    imageButton2.setOnClickListener(this); 
    imageButton3.setOnClickListener(this); 
    imageButton4.setOnClickListener(this); 
     } 

public void onClick1(View view) { 
    Intent intent = 
      new Intent(this, OtherActivity.class); 
      startActivity(intent); 
} 
      public void onClick2(View view) { 
       Intent intent = 
       new Intent(this,  OtherActivity2.class); 
       startActivity(intent);   
} 

如果您發現我只編碼四個按鈕2(所以一旦這個代碼在理論上,其他應工作)。

這就是imageButton1調用的OtherActivity。

package com.example.startanotheractivity; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageButton; 

public class OtherActivity extends Activity 
      implements OnClickListener { 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.other_layout); 
    Intent intent = getIntent(); 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

} 
}  

,這是imageButton2調用

​​

這裏是我的layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_gravity="center_horizontal" 
android:background="#FFFFFF" > 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:orientation="vertical" > 

    <ImageButton 
     android:id="@+id/imageButton1" 
     android:layout_width="566dp" 
     android:layout_height="456dp" 
     android:background="@null" 
     android:src="@drawable/gatanga1" 
     android:onClick="onClick1" /> 

     <ImageButton 
     android:id="@+id/imageButton2" 
     android:layout_width="540dp" 
     android:layout_height="189dp" 
     android:background="@null" 
     android:src="@drawable/gatanga2" 
     android:onClick="onClick2" /> 

      <ImageButton 
     android:id="@+id/imageButton3" 
     android:layout_width="540dp" 
     android:layout_height="189dp" 
     android:background="@null" 
     android:src="@drawable/gatanga3" 
     android:onClick="onClick3" /> 

      <ImageButton 
     android:id="@+id/imageButton4" 
     android:layout_width="540dp" 
     android:layout_height="189dp" 
     android:background="@null" 
     android:src="@drawable/gatanga4" 
     android:onClick="onClick4" /> 

</LinearLayout> 

謝謝

很多很多的感謝活動。

+0

嘗試下面的解決方案,讓我知道它是否在工作? – InnocentKiller

回答

0

使用switch語句中的onClick方法

@Override 
public void onClick(View v) { 

    switch(v.getId()){ 

    case R.id.imageButton1: /** Start a new Activity OtherActivity.java */ 
     Intent intent = new Intent(MainActivity.this, MyCards.class); 
     this.startActivity(intent); 
     break; 

    case R.id.imageButton2: /** Start a new Activity OtherActivity2.java */ 
     Intent intent2 = new Intent(MainActivity.this, OtherActivity2.class); 
     this.startActivity(intent2); 
     break; 
    } 
-1

在MainActivity你應該正確地實現OnClickListener接口:

@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.imageButton1: 
      Intent intent = 
      new Intent(this, OtherActivity.class); 
      startActivity(intent); 
      break; 
     case R.id.imageButton2: 
      Intent intent = 
      new Intent(this, OtherActivity2.class); 
      startActivity(intent); 
      break; 
    } 
} 
0

的onclick方法傳遞所點擊的視圖作爲一個變量,則可以使用一個switch語句以確定哪個視圖被點擊,然後您可以執行您的操作..

public void onClick(View v) { 

    switch(v.getId()){ 

    case R.id.imageButton1: 
     Intent intent = new Intent(MainActivity.this, OtherActivity.class); 
     startActivity(intent); 
     break; 

    case R.id.imageButton2: 
     Intent intent = new Intent(MainActivity.this, OtherActivity2.class); 
     startActivity(intent2); 
     break; 
    } 
} 
0

學者,受過教育的貴族,當然還有水管工。

謝謝你的回覆。它現在通過我所做的代碼工作,但我會嘗試上述解決方案。我已經嘗試過使用開關,我喜歡它們。我想確保內存管理和文件大小保持在最低限度,因爲最終應用程序將有大約40個活動。

但是我的方式做,這是我刪除了所有其他ImageButtons聲明中MainActivity除了:然後

public class MainActivity extends ActionBarActivity implements OnClickListener { 
ImageButton imageButton1; 
Intent intent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.reusable_layout); 
imageButton1=(ImageButton)findViewById(R.id.imageButton1); 

    } 

的onclick方法都留給onClick1,onClick2。兩項活動都有效。我加入onClick3和onClick4像下面:

public void onClick1(View view) { 
Intent intent = 
     new Intent(this, OtherActivity.class); 
     startActivity(intent); 
} 
     public void onClick2(View view) { 
      Intent intent = 
      new Intent(this,  OtherActivity2.class); 
      startActivity(intent);   
} 
     public void onClick3(View view) { 
      Intent intent = 
      new Intent(this, OtherActivity3.class); 
      startActivity(intent); 
} 
     public void onClick4(View view) { 
      Intent intent = 
      new Intent(this,  OtherActivity4.class); 
      startActivity(intent);   
} 

我覺得好像然後發生的是代碼混淆wasnt或停留在循環(它沒有在我的原始張貼崩潰)。但現在它直接進入佈局,獲取按鈕1和「onClick2」的「onClick1」,並將它們與MainActivity中的public void onClick(X)匹配,因爲我剛宣佈我正在使用ImageButton和一個Intent,在onClickListener之後,它可以工作。

請注意,如果我移動此代碼它打破或將給我同樣的錯誤。無論如何,我很高興它的作品,但我很感興趣,爲什麼我不必聲明所有的按鈕。也許這只是Java代碼工作的邏輯。

我會毫不猶豫地嘗試開關和稍後試驗的修正。

祝好。

+0

我認爲你的實現'實現OnClickListener'是沒用的.. – Fllo

相關問題