1

私はこの問題を抱えています。2つのボタンと1つのTextViewを使用してアクティビティを作成しました。「次へ」ボタンを押すとTextViewが変更され、「前へ」ボタンを使用してTextViewを元の状態(textview1)に戻します。ただし、textview1が表示されているときに「Previous」を押すか、textview2が表示されているときに「Next」を押すと、アプリケーションでエラーが発生し、結果としてシャットダウンされます。私が今達成したいのは、textview1がオンのときにボタン「前へ」を非表示にし、textview2がオンのときにボタン「次へ」を非表示にすることです。

これは私が現在使用しているクラスです:

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ステートメントを使用することを考えましたが、知識と経験が不足しているため、機能させることができませんでした。誰かがここで私を助けてくれるなら、それは素晴らしいことです。前もって感謝します。

4

3 に答える 3

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);
            }
            }
            });
于 2012-12-27T20:25:24.993 に答える
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);
       }
    });
于 2012-12-27T20:27:35.203 に答える
0

アクティブなときに押すと(そしてtextIdxが0の場合Previoustextview1textIdxは負になります。配列から負のインデックスを持つ要素を取得することはできません。

同様に、アクティブなときに押すと( NexttextIdxtexview2は1)、1textIdxより大きくなります。配列サイズ以上のインデックスを持つ要素を取得することはできません。

クラッシュの問題を解決するために、に置き換えることをお勧めしますtextIdx++textIdx = 1textIdx--textIdx = 0

ボタンを非表示にするには、を試しNext.setVisibility(View.INVISIBLE)て、Next.setVisibility(View.VISIBLE)復元します。

于 2012-12-27T20:29:19.720 に答える