2012-10-06 86 views
4

我昨天上傳了我的應用程序到Google Play,今天早上我只想做一個佈局調整,因爲一些文本在較小的屏幕上重疊按鈕,基本上我只想移動按鈕進一步在屏幕下方。我認爲這將和使用eclipse的圖形編輯器一樣簡單......不。Android應用程序點擊按鈕調用不正確的OnClick監聽器

我不知道爲什麼,但我已經做了我的「view_fact」佈局按鈕位置的小編輯註冊了錯誤的OnClick監聽器的按鈕,視圖上只有兩個按鈕,他們是使用eachothers事件聽衆,我不知道爲什麼。我沒有觸及完全在舊佈局上工作的事件監聽器代碼。

這裏是我的view_fact佈局:

<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" > 

<TextView 
    android:id="@+id/viewFactTitleText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="18dp" 
    android:text="@string/factTitleText" 
    android:textSize="22dp" 
    tools:context=".MainActivity" /> 

<ImageView 
    android:id="@+id/randomFactImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/viewFactTitleText" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="18dp" 
    android:contentDescription="Fact Image" 
    android:src="@drawable/canadaflag" /> 

<TextView 
    android:id="@+id/factData" 
    android:layout_width="300dp" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/randomFactImage" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="14dp" 
    android:text="TextView" /> 

<Button 
    android:id="@+id/anotherFactButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/backToHomeButton" 
    android:layout_alignLeft="@+id/backToHomeButton" 
    android:layout_alignRight="@+id/backToHomeButton" 
    android:text="@string/anotherFactButtonText" /> 

<Button 
    android:id="@+id/backToHomeButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/factData" 
    android:layout_alignParentBottom="true" 
    android:layout_alignRight="@+id/factData" 
    android:text="@string/backToHomeButtonText" /> 


</RelativeLayout> 

監聽器和啓動代碼:

public class MainActivity extends Activity { 
/* Declaration of global variables */ 
private boolean debugMode = true; // Whether debugging is enabled or not 

private static String logtag = "CanadianFacts"; // For use as the tag when logging 
private TextView factData; 
private int totalFacts = 72; 
private String[][] facts = new String[totalFacts][5]; 
private int lastFact = 0; 


/* Buttons */ 
/* Home page */ 
private Button randomFactButton; 

/* View Fact page */ 
private Button anotherRandomFactButton; 
private Button backToHomeButton; 

/* About page */ 
private Button backToHomeFromAboutButton; 

/* Image Views */ 
private ImageView randomFactImage; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /* Home Page Objects */ 
    randomFactButton = (Button)findViewById(R.id.randomFactButton); 
    randomFactButton.setOnClickListener(randomFactListener); // Register the onClick listener with the implementation above 

    /* View Fact Page Objects */ 


    /* Build Up Fact Array */ 
    buildFactArray(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menu_about: 
      loadAboutPage(); // Call the loadAboutPage method 
      return true; 
    } 

    return false; 
} 

public void loadAboutPage() { 
    setContentView(R.layout.about); 

    /* Set up home page button listener */ 
    backToHomeFromAboutButton = (Button)findViewById(R.id.backToHomeFromAboutButton); 
    backToHomeFromAboutButton.setOnClickListener(backToHomeListener); // We can reuse the backToHomeListener 

} 

/* Home Page Listeners */ 
//Create an anonymous implementation of OnClickListener, this needs to be done for each button, a new listener is created with an onClick method 
private OnClickListener randomFactListener = new OnClickListener() { 
    public void onClick(View v) { 
     if (debugMode) { 
      Log.d(logtag,"onClick() called - randomFact button");    
      Toast.makeText(MainActivity.this, "The random fact button was clicked.", Toast.LENGTH_LONG).show(); 
     } 

     setContentView(R.layout.view_fact); // Load the view fact page 

     /* We're now on the View Fact page, so elements on the page are now in our scope, instantiate them */ 

     /* Another Random Fact Button */ 
     anotherRandomFactButton = (Button)findViewById(R.id.anotherFactButton); 
     anotherRandomFactButton.setOnClickListener(anotherRandomFactListener); // Register the onClick listener with the implementation above 

     /* Back to Home Button */ 
     backToHomeButton = (Button)findViewById(R.id.backToHomeButton); 
     backToHomeButton.setOnClickListener(backToHomeListener); // Register the onClick listener with the implementation above 

     // Get a random fact 
     String[] fact = getRandomFact(); 

     if (fact[2] == null) { // If this fact doesn't have an image associated with it 
      fact[2] = getRandomImage(); 
     } 

     int imageID = getDrawable(MainActivity.this, fact[2]); 

     /* See if this fact has an image available, if it doesn't select a random generic image */ 
     randomFactImage = (ImageView) findViewById(R.id.randomFactImage); 
     randomFactImage.setImageResource(imageID); 

     factData = (TextView) findViewById(R.id.factData); 
     factData.setText(fact[1]); 

     if (debugMode) { 
      Log.d(logtag,"onClick() ended - randomFact button"); 
     } 
     } 
}; 


/* View Fact Page Listeners */ 
private OnClickListener anotherRandomFactListener = new OnClickListener() { 
    public void onClick(View v) { 
     if (debugMode) { 
      Log.d(logtag,"onClick() called - anotherRandomFact button");    
      Toast.makeText(MainActivity.this, "The another random fact button was clicked.", Toast.LENGTH_LONG).show(); 
     } 

      // Get a random fact 
      String[] fact = getRandomFact(); 

      if (fact[2] == null) { // If this fact doesn't have an image associated with it 
       fact[2] = getRandomImage(); 
      } 

      int imageID = getDrawable(MainActivity.this, fact[2]); // Get the ID of the image 

      /* See if this fact has an image available, if it doesn't select a random generic image */ 
      randomFactImage = (ImageView) findViewById(R.id.randomFactImage); 
      randomFactImage.setImageResource(imageID); 

      factData = (TextView) findViewById(R.id.factData); 
      factData.setText(fact[1]); 

      if (debugMode) { 
       Log.d(logtag,"onClick() ended - anotherRandomFact button"); 
      } 
    } 
}; 

private OnClickListener backToHomeListener = new OnClickListener() { 
    public void onClick(View v) { 
     if (debugMode) { 
      Log.d(logtag,"onClick() called - backToHome button");    
      Toast.makeText(MainActivity.this, "The back to home button was clicked.", Toast.LENGTH_LONG).show(); 
     } 

      // Set content view back to the home page 
      setContentView(R.layout.main); // Load the home page 

      /* Reinstantiate home page buttons and listeners */ 
      randomFactButton = (Button)findViewById(R.id.randomFactButton); 
      randomFactButton.setOnClickListener(randomFactListener); // Register the onClick listener with the implementation above 

      if (debugMode) { 
       Log.d(logtag,"onClick() ended - backToHome button"); 
      } 
    } 
}; 

謝謝。

回答

2

我已經設法解決這個問題,通過移動按鈕,改變ID幾次,然後改變它們。並刪除所有的對齊設置並重置它的位置。

一個很奇怪的問題,可能是由於eclipse的圖形編輯器。

相關問題