2012-12-27 29 views
1

我有這個問題。我用兩個按鈕和一個TextView創建了一個活動。通過按下按鈕「下一步」可以更改TextView,並使用按鈕「上一個」將TextView更改回原來的位置(即textview1)。但是當顯示textview1時按下「Previous」或在顯示textview2時按下「Next」時,應用程序會收到錯誤並因此被關閉。我現在想要實現的是讓textview1打開時Button「Previous」消失,當textview2打開時讓Button「Next」消失。如何在某些TextView顯示時使按鈕消失?

這是I類目前使用:

package com.example.test8; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Typeface; 
import android.view.Menu; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.ImageButton; 
import android.widget.TextView; 

public class Main extends Activity { 
    private static final String[] Texts= 
     {"textview1", 
     "textview2" 
     }; 

int textIdx = 0; 

TextView Text; 
ImageButton Next; 
ImageButton Previous; 

public static String getText(int idx) { 
    return Texts[idx]; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final TextView text = (TextView) findViewById(R.id.text); 
    ImageButton Next = (ImageButton) findViewById(R.id.Next); 
    ImageButton Previous = (ImageButton) findViewById(R.id.Previous); 
    Text.setText(getText(textIdx)); 

    Next.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
     textIdx++; 
     Text.setText(getText(textIdx)); 
     } 
    }); 

    Previous.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
     textIdx--; 
     Text.setText(getText(textIdx)); 
     } 
     }); 

@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, menu); 
    return true; 
} 

我想過使用一個else if語句,但我不能讓它工作,因爲我缺乏知識和經驗。如果有人能幫助我,那會很好。提前致謝。

回答

0

你應該禁用的按鈕來防止用戶點擊它的時候沒有什麼提前或者您的數組中落後。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final TextView text = (TextView) findViewById(R.id.text); 
    ImageButton Next = (ImageButton) findViewById(R.id.Next); 
    ImageButton Previous = (ImageButton) findViewById(R.id.Previous); 
    Text.setText(getText(textIdx)); 

    Previous.setEnabled(false); //defaults the button to disabled 

    Next.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
     textIdx++; 
     Text.setText(getText(textIdx));    
     Previous.setEnabled(true); 
     if(textIdx>=Text.length-1) 
      Next.setEnabled(false); 
     } 
    }); 

    Previous.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
     textIdx--; 
     Text.setText(getText(textIdx));    
     Next.setEnabled(true); 
     if(textIdx<=0) 
      Previous.setEnabled(false); 
     } 
    }); 
+0

這段代碼的一些調整工作。謝謝! –

+0

我試圖讓代碼帳戶爲多於兩個元素的字符串數組。不知道它是否爲你的項目過度殺死,但認爲它可能會在未來幫助你 – Woodsy

1

你可以使用一個簡單的if語句

 Next.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
      if(textIdx == 0) 
      { 
       textIdx++; 
       Text.setText(getText(textIdx)); 
       Next.setVisibility(View.INVISIBLE); 
       Previous.setVisibility(View.VISIBLE); 
      } 
      } 
     }); 

     Previous.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

      if(textIdx == 1) 
      { 
       textIdx--; 
       Text.setText(getText(textIdx)); 
       Next.setVisibility(View.VISIBLE); 
       Previous.setVisibility(View.INVISIBLE); 
      } 
      } 
      }); 
+0

嘿,謝謝你的努力。但使用這個Im得到一個錯誤:方法setVisible(布爾)是未定義的類型ImageButton。然後,我將其更改爲setClickable(...),但是當打開應用程序時,我遇到了同樣的崩潰。 –

+0

哦,哎呀,我認爲它應該是'.setVisibility(布爾值)' – rasen58

0

如果按Previoustextview1是有效的(和textIdx爲0),textIdx變爲負值。您無法從數組中獲取負數索引元素。

同樣,當你按下Nexttexview2有效(textIdx爲1),textIdx變得大於1。你不能用指數等於或大於你的數組大小時得到的元素。

我建議你用textIdx++替換成textIdx = 1textIdx--textIdx = 0,這樣可以解決崩潰問題。

使按鈕消失嘗試Next.setVisibility(View.INVISIBLE)Next.setVisibility(View.VISIBLE)來恢復它。

相關問題