2016-11-19 10 views
0

いつも私のアプリに入れましたvoid onCreateのボタンを追加しましたが、今ではもっとボタン(約10)でアプリをやろうとしています。私はすべてのボタンを起動アプリでアクティブにしたいと思います。 私の意見では、このonCreateを追加するにはあまりにも多くのボタンであり、アプリケーションは長く始まるでしょう。
私はこの入れてみました:どのように、どこのonCreateの外にボタンを追加することができ、onCreateボタンがonCreateの外にあります

のうち

myButton.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View view) { 
     myMethod(); 
    } 
}) 

をしかしAndroidStudioは、私がアイデアを持っていないsetOnClickListenerview

を強調しています。

+0

アクティビティに必要なUIに関連するすべてのものは、onCreateで定義する必要があります。 – Swr7der

+0

'onCreate()'では問題は発生しませんが、そのメソッドを保持したい場合よりクリーンであれば、初期化を行うメソッドを作成し、 'onCreate()'から呼び出すことができます。 – codeMagic

答えて

1

あなたは、単に、同じクラスに例えばあなたのボタンの別のメソッドを追加することができます。:

public void onCreate(...){ 
    //Standard setup of views or whatever you want to do here 

    this.addButtons(); 
} 

private void addButtons(){ 
    Button b1 = new Button("Hi"); 
    b1.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      myMethod(); 
     } 
    }); 

    Button b2 = new Button("Hi to you too"); 
    b2.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      myMethod(); 
     } 
    }); 
} 

これは一例です。あなたはsooooで多くの方法でこれを行うことができます。 Javaの基本的なObject Orientedプログラミングを徹底的に学ぶ必要があるように感じます。なぜなら、それはあなたの質問があなたが理解していないことを示唆しているからです。 YouTubeのチュートリアルに従ってください。私はいつも "The New Boston"のJavaチュートリアルシリーズがyoutubeに好きです。

PS:あなたは「知恵の言葉」の下で、この美しいようなコードを作ることができます。あなたのonCreateに多くの作業をしなければならないが、あなたはその心配している場合は、自分で

+0

彼はOnclickListenerを拡張する新しいクラスを定義しているかもしれません。 –

+0

しかし、それはすべてのボタンが重複する機能を持っているかどうかによって異なります。あなたは100の方法でこの問題を解決することができます、すべてが要件に応じて異なります –

+0

@ RoelSrolenberg私は同意します。 –

1

を繰り返さないでください。 UIは、あなたが常にのonCreateメソッドプットでそうハンドラに遅れて実行可能を投稿することができますロードに時間がかかりすぎるでしょう:これは何をするか

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     //add your code here 
    } 
},10); 

は、あなたのUIがあなたのRunnableのコードが10を実行されますその後、ロードされますですあなたのUIがロードされてからミリ秒後に、あなたのアプリはUIを読み込むのにあまり時間がかかりません。私はそれが必要であるとは思わない。

2

あなたのoncreateメソッドを混雑させたくない場合は、onCreateの外にある任意の場所にクリックリストを作成し、onCreateで設定してください。

のonCreate:

edit_a_member = (Button) findViewById(R.id.edit_member); 
    delete_a_member = (Button) findViewById(R.id.delete_member); 

    edit_a_member.setOnClickListener(handleClick); 
    delete_a_member.setOnClickListener(handleClick); 

clickListener:

private View.OnClickListener handleClick = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      switch (view.getId()) { 
       case R.id.edit_member: 
        member_selected = EDIT_MEMBER_SELECTED; 
        callDialog(); 
        break; 
       case R.id.delete_member: 
        callDeleteAlert(); 
        break; 
      } 
     } 
    }; 
1

XMLファイルでボタンを宣言している場合:

あなたのXML内の各ボタンの宣言でこれらのプロパティを追加します。

android:clickable="true" 
android:onClick="onClick" 

そして今、活動クラスでは、このような方法で作成します:

このようにボタンを追加する方法を作成します:

void addButton(String buttonName, int button id){ 
    Button button = new Button(this); 
    button.setText("Push Me"); 
    (add it to parent Layout of xml) 
    button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    switch(id){ 
     case id1: 
     (handle) 
     break; 
     (like for others) 
    } 
    } 
    }); 
} 
あなたが動的にボタンを追加したい場合は

public void onClick(View v){ 
    switch(v.getId){ 
    case R.id.{buttons_id_in_xml} 
     (Your Code) 
     break; 
     (Like for others) 
    } 
    } 

0

これを行う最善の方法は次のとおりです。

implements View.OnClickListener

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

// declare variables 
private Button mBtn1; 
private Button mBtn2; 

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

    // make an instance to the btns 
    mBtn1 = findViewById(R.id.btn1); 
    mBtn2 = findViewById(R.id.btn2); 

    // set onClickListener 
    mBtn1.setOnClickListener(this); // with "this" you are passing the view 
    mBtn2.setOnClickListener(this); 
} 

// implement onClick 
@Override 
public void onClick(View view) { 
    // check which btn was clicked by id 
    switch (view.getId()) { 
     case R.id.btn1: 
      btn1Clicked(); 
      break; 
     case R.id.btn2: 
      btn2Clicked(); 
      break; 
    } 
} 

private void btn1Clicked() { 
    // your code btn1 clicked 
} 

private void btn2Clicked() { 
    // your code btn2 clicked 
} 

希望これは助けました。乾杯!