1

次の問題があります。

動的に作成されるいくつかの TableRows と共に TableLayout があります。すべての行の右側に、別のアクティビティを呼び出すボタンを作成します。ここで、 でいくつかの情報を渡したいと思いますintent.putExtra()。この場合、行の最初の情報でもある行番号を渡したいと思います。現在の状態の写真は次のとおりです。

スクロール ビュー内にあります。

これは、実行時に(ループで)ボタンを作成する方法です。

Button b1 = new Button (this, null, android.R.attr.buttonStyleSmall);
            b1.setId(1000+grButtonId);
            b1.setText("Request GR");
            b1.setLayoutParams(params);
            b1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {    
                                    // Some code, taken out for clarity
                                    // See next code snippet  
                }
            });
grButtonId++;
tr.addView(b1);

これまでの私の考えは、(もちろん) ボタンの id を使用し、 の値で行番号を取得することですgrButtonId

ここで私の問題が発生します。私のonClick方法を詳しく見てみましょう。

    @Override
public void onClick(View view) {    
// finished is true, as soon as GRRequest has recieved the data
if(!finished & !dataRequested){
  new GRRequest().execute(getIntent().getLongExtra("poNr", 0),(long)view.getId());
  b1.setText("Show GR");
  Log.d("DataList", detailList.toString());
  dataRequested=true;
 }
else{
  if (dataRequested){
   b1.setText("Show GR");   
  }
Intent intent = new Intent(DataTableCreater.this, GRTableCreater.class);
                    intent.putExtra("lineNr",view.getId());
                    intent.putExtra("dataList", detailList);
                    startActivity(intent);

                }
              }

データをリクエストすると、クリックしたボタンが意図したとおりに "Show GR" に設定されます。他のボタンは「リクエスト GR」のままですが、これも問題ありません。しかし今、私はこれらのボタンを最初にタップしたときに "Show GR" に変更し、2 回目のタップでアクティビティを開始したいと考えています。ここまでで、ボタンは「Show GR」に変わり、アクティビティを直接開始します。これを機能させるための解決策は何ですか?

4

1 に答える 1

1

clickedOnce[] = new boolean[grButtonId+1]ボタンごとにブール配列の 1 つのフィールドを作成します。じゃあこれをどうぞ

    public void onClick(View view) {    

    if(!finished){
    new GRRequest().execute(getIntent().getLongExtra("poNr", 0),(long)view.getId());
    b1.setText("Show GR");
    Log.d("DataList", detailList.toString());
    clickedOnce[Integer.parseInt(String.valueOf(view.getId()).substring(1,4))]=true; //sets the clickedOnce for this button to true, substring(1,4) is needed to cancle the leading 1 from the id  
                    }
                    else{
                    //Checks, if the button was clicked once        
                    if (!clickedOnce[Integer.parseInt(String.valueOf(view.getId()).substring(1,4))]){
                    b1.setText("Show GR");  
                    clickedOnce[Integer.parseInt(String.valueOf(view.getId()).substring(1,4))]=true;
                    }
                    else{
                    Intent intent = new Intent(DataTableCreater.this, GRTableCreater.class);
                    intent.putExtra("lineNr",view.getId());
                    intent.putExtra("dataList", detailList);

                    startActivity(intent);
                    }
                }
              }
于 2013-08-14T11:09:39.517 に答える