使用android中的按钮

时间:2011-09-21 20:48:18

标签: android button methods onclick

好吧,所以我在我正在尝试创建的应用程序上取得了很大的进步,但是我一直在学习的大多数教程只展示了在应用程序中只有一个活动小部件的奇妙功能一段时间......

问题是,我的应用程序需要2个或更多按钮,这是我部分卡住的部分。我的代码实现了下面显示的“SetWordsBtn”(声明了其他所有内容),

  

public void onCreate(Bundle icicle){

   super.onCreate(icicle);
   setContentView(R.layout.main);

   SetWordsBtn=(Button)findViewById(R.id.SetWordsBtn);

   SetWordsBtn.setOnClickListener(this);
     

}

实现了像这样的onClick():

  

public void onClick(查看视图){

  startWords();
     

}

但如果我有另一个按钮删除“DelWordsBtn”这样的单词怎么办?我想我可以同时声明这两个按钮:

  SetWordsBtn=(Button)findViewById(R.id.SetWordsBtn);
  DelWordsBtn=(Button)findViewById(R.id.DelWordsBtn);

  SetWordsBtn.setOnClickListener(this);
  DelWordsBtn.setOnClickListener(this);

但是onClick()方法怎么样?当我这样做时,它会自动应用于两个按钮吗?

我如何能够彼此声明单独的onClick,这样当我点击其中任何一个时它们都会做不同的事情?

我认为答案可能是这样的,但我不知道:

  //Declarations
  SetWordsBtn=(Button)findViewById(R.id.SetWordsBtn);
  DelWordsBtn=(Button)findViewById(R.id.DelWordsBtn);

  SetWordsBtn.setOnClickListener(setWordsView);
  DelWordsBtn.setOnClickListener(delWordsView);

  //onClick Functions
     

public void onClick(查看setWordsView){

  startWords();
     

}

     

public void onClick(查看delWordsView){

  deleteWords();
     

}

所以它实际上将startWords()函数链接到SetWordsBtn,并将deleteWords()链接到DelWordsBtn ......

任何明确的解释/形式的帮助将不胜感激。先谢谢你们。 :)

4 个答案:

答案 0 :(得分:3)

典型的惯例是关闭单击的View的ID。例如:

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.SetWordsBtn:
                startWords();
                break;
            case R.id.DelWordsBtn:
                deleteWords();
                break;
        }
    }
};

int[] ids = { R.id.SetWordsBtn, R.id.DelWordsBtn };

for(int i : ids) ((Button)findViewById(i)).setOnClickListener(listener);

答案 1 :(得分:1)

您也可以设置监听的匿名内部类,而不是让您的Activity本身成为实现OnClickListener的侦听器。来自Android Button javadoc的示例:

     button.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             // Perform action on click
         }
     });

http://developer.android.com/reference/android/widget/Button.html

P.S。用小写字母开始你的局部变量名和方法名 - 大写用于类名。

答案 2 :(得分:0)

你建议的地方:

public void onClick(View setWordsView) {

  startWords();
}

public void onClick(View delWordsView) {

  deleteWords();
}

如果你考虑一下,两个方法声明没有区别,你会得到一个构建错误(方法签名是相同的,即使方法参数View有不同的名称)。

如果我理解你的问题,那么kcoppock给出的答案是正确的。您还可以定义Anonymous Class

答案 3 :(得分:0)

graghiclayout.xml上的拖放按钮 ...>右键单击按钮 - >选择其他属性....>选择继承自视图---->单击单击....将其命名为callme

这将是这样的表现:

xml文件

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="76dp"
    android:layout_y="58dp"
    android:onClick="callme"
    android:text="Button" />

运行一次项目:

打开src ---&gt;活动.java -----&gt; ,做这样的编码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.main);

   but=(Button)findViewById(R.id.button1);
}

public void callme(View v)
{
//Do somthing
}