0

ボタンのテキストを変数に保存したい。

この記事を参照しましたが、「1つのボタンに1つの変数」を定義しています。私のアプリには約80〜90個のボタンがあります。これらのボタンのいずれかからのデータを単一の変数に保存し、その共通の変数を以降の操作に使用するにはどうすればよいですか?

例 -

私はボタンを持っています-1、2、3、4、5、6、7、8、9

btn = (Button) findViewByIdJavaでそれらを単一のボタン(...もの)に初期化して、単一の変数でテキストを取得するにはどうすればよいですか?Coz私はJavaで90個のボタンを個別に定義することはできません!!

これどうやってするの?

これがiveが行ったことのコードです..(完全に愚かで非効率的な方法)-

基本的には、12個のボタンのうち、どちらが押されても、文字列で連結します。たとえば、1を押すと文字列は01になり、その後10を押すと文字列は0110になります。

public class FEa extends Activity implements View.OnClickListener
{
    Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12;
    TextView tvDisp;
    String acc;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fea);
        initialise();
    }

    private void initialise()
    {
        b1 = (Button) findViewById (R.id.Btn1);
        b1.setOnClickListener(this);
        b2 = (Button) findViewById (R.id.Btn2);
        b2.setOnClickListener(this);
        b3 = (Button) findViewById (R.id.Btn3);
        b3.setOnClickListener(this);
        b4 = (Button) findViewById (R.id.Btn4);
        b4.setOnClickListener(this);
        b5 = (Button) findViewById (R.id.Btn5);
        b5.setOnClickListener(this);
        b6 = (Button) findViewById (R.id.Btn6);
        b6.setOnClickListener(this);
        b7 = (Button) findViewById (R.id.Btn7);
        b7.setOnClickListener(this);
        b8 = (Button) findViewById (R.id.Btn8);
        b8.setOnClickListener(this);
        b9 = (Button) findViewById (R.id.Btn9);
        b9.setOnClickListener(this);
        b10 = (Button) findViewById (R.id.Btn10);
        b10.setOnClickListener(this);
        b11 = (Button) findViewById (R.id.Btn11);
        b11.setOnClickListener(this);
        b12 = (Button) findViewById (R.id.Btn12);
        b12.setOnClickListener(this);
        tvDisp=(TextView) findViewById (R.id.TxtViewDisplay);

    }

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

        switch(v.getId())
        {
        case R.id.Btn1:

            if(acc == null)
            {
                acc = "01";
                tvDisp.setText("String Is:" + acc);
            }
            else
            {
                acc=acc + "0"+1;
                tvDisp.setText("String Is:" + acc);
            }

            break;
        case R.id.Btn2:

            if(acc == null)
            {
                acc = "02";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0"+2;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn3:

            if(acc == null)
            {
                acc = "03";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0"+3;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn4:

            if(acc == null)
            {
                acc = "04";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0"+4;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn5:

            if(acc == null)
            {
                acc = "05";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0"+5;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn6:

            if(acc == null)
            {
                acc = "06";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0"+6;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn7:

            if(acc == null)
            {
                acc = "07";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0"+7;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn8:

            if(acc == null)
            {
                acc = "08";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0"+8;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn9:

            if(acc == null)
            {
                acc = "09";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + "0" +9;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn10:

            if(acc == null)
            {
                acc = "10";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + 10;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn11:

            if(acc == null)
            {
                acc = "11";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + 11;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        case R.id.Btn12:

            if(acc == null)
            {
                acc = "12";
                tvDisp.setText("String Is:" + acc);     
            }
            else
            {
                acc = acc + 12;
                tvDisp.setText("String Is:" + acc);
            }
            break;
        }
    }
}
4

3 に答える 3

3

すべてのボタンで同じ onClick メソッドを呼び出す必要があると思います。これは、すべてのボタンに対して xml で設定できます。

<Button android:layout_height="45dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onButtonClick" />

次に、アクティビティで、文字列を非常に簡単に蓄積できます。

public class FEa extends Activity
{
   TextView tvDisp;
   String acc = "";

   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.fea);
       tvDisp = (TextView) findViewById (R.id.TxtViewDisplay);
   }

    public void onButtonClick(View v){
        Button theButton = (Button)v;
        acc = acc + theButton.getText().toString();
        tvDisp.setText("String Is: " + acc);
    }

}
于 2012-12-07T20:49:15.647 に答える
0

ビューグループのようなビューを使用してボタンを含めることができると思います。次に、 for() または while() で getChildAt(int index) を使用して、リスト内の各ボタンを取得し、それらからテキストを次々に取得するだけです。

私はそれを試したことはありませんが、うまくいくと思います。

それが役立つことを願っています。

于 2012-12-07T18:32:26.030 に答える
0

私はこのコードをテストしていませんが、すべてのボタン (xml 内) のタグを「ボタン」に設定してから、すべてのテキストをHashMap.

HashMap<Integer, String> buttonTexts;
RelativeLayout mainLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.fea);
    buttonTexts = new HashMap<Integer, String>();
    mainLayout = (RelativeLayout)findViewById(R.id.myRelativeLayout);
    getTxtFromBtns();
    Log.i("HashMapValues", buttonTexts.toString());
}

public void getTxtFromBtns() {
    for (int i = 0; i <= mainLayout.getChildCount(); i++) {
        View view = mainLayout.getChildAt(i);
        String buttonChk = (String) view.getTag();
        if (buttonChk.equals("button")) {
            Button newBtn = (Button) view;
            String buttonText = (String) newBtn.getText();
            buttonTexts.put(view.getId(), buttonText);
        }
    }
}

次に、単純にテキストを取得できます

String myButton = buttonTexts.get(R.id.Btn1);
于 2012-12-07T18:39:13.723 に答える