onCreate之外的按钮

时间:2016-11-19 16:15:46

标签: java android button oncreate

总是在我的应用中,我在void onCreate添加了按钮,但现在我尝试使用更多按钮(大约10个)进行应用。我想在启动应用程序上激活所有按钮。 在我看来,在这个onCreate中添加的按钮太多了,应用程序将开始变长 我试着说:

myButton.setOnClickListener(new View.OnClickListener() {

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

onCreate

但AndroidStudio强调setOnClickListenerview

我没有想法,如何以及在哪里可以添加onCreate按钮。

5 个答案:

答案 0 :(得分:2)

如果你不想过度使用你的oncreate方法,那么在活动的任何地方创建一个clicklistener,然后在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 :(得分: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();
        }   
    });
}

这是一个例子。你可以用很多方式做到这一点。我觉得你应该彻底学习Java的基本Object Oriented编程,因为这真的是你的问题表明你不理解的。按照youtube教程进行操作。我总是喜欢在youtube上的#But New Boston" Java教程系列。

PS:你可以在智慧的话语下制作这样美丽的代码':不要重复自己

答案 2 :(得分:1)

如果您必须在onCreate中做很多工作,但是您担心UI加载时间太长,您可以将延迟的runnable发布到处理程序,因此在onCreate方法中放置:

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

这将是你的UI将加载然后你的Runnable中的代码将在你的UI加载后10毫秒执行因此你的应用程序将不会花费太长时间来加载UI,即使在你的情况下我怀疑它将是必要的。

答案 3 :(得分:1)

如果要声明xml文件中的按钮:

在Xml中的每个按钮声明中添加这些属性:

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

现在在Activity Class中创建一个这样的方法:

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

如果您想动态添加按钮:

创建一个添加按钮的方法:

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)
     }
   }
   });
}

答案 4 :(得分: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
}

希望这有帮助。干杯!