在android中使用按钮

在android中使用按钮,android,button,methods,onclick,Android,Button,Methods,Onclick,好的,我在我尝试创建的应用程序上取得了很大的进步,但是我从中学习的大多数教程都只展示了一个奇妙的特性,即一次只有一个活动小部件在应用程序中 问题是,我的应用程序需要2个或更多的按钮,而这正是我部分陷入困境的地方。我的代码实现了如下所示的“SetWordsBtn”(其他所有内容都已声明) 创建公共空间(捆绑冰柱){ } 它实现了如下的onClick(): @Override public void onCreate(Bundle savedInstanceState) { super.on

好的,我在我尝试创建的应用程序上取得了很大的进步,但是我从中学习的大多数教程都只展示了一个奇妙的特性,即一次只有一个活动小部件在应用程序中

问题是,我的应用程序需要2个或更多的按钮,而这正是我部分陷入困境的地方。我的代码实现了如下所示的“SetWordsBtn”(其他所有内容都已声明)

创建公共空间(捆绑冰柱){

}

它实现了如下的onClick():

@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
}
公共void onClick(视图){

}

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

@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
}
但是onClick()方法呢?当我这样做时,它会自动应用于两个按钮吗

我怎样才能声明一个彼此独立的onClick,这样当我点击其中任何一个时,它都会做不同的事情

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

单击公共void(查看设置字视图){

}

公共void onClick(视图delWordsView){

}

因此它实际上会将startWords()函数链接到SetWordsBtn,将deleteWords()链接到DelWordsBtn


任何明确的解释/帮助形式都将不胜感激。提前谢谢大家。:)

典型的惯例是只关闭所单击视图的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);

典型的惯例是只关闭所单击视图的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);

您也可以设置侦听的匿名内部类,而不是让您的活动本身成为实现OnClickListener的侦听器。Android按钮javadoc中的示例:

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


另外,用小写字母开始局部变量名和方法名,大写字母表示类名。

您也可以设置匿名内部类进行侦听,而不是让活动本身作为实现OnClickListener的侦听器。Android按钮javadoc中的示例:

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

请注意,用小写字母开始局部变量名和方法名,大写字母表示类名。

您建议:

public void onClick(View setWordsView) {

  startWords();
}

public void onClick(View delWordsView) {

  deleteWords();
}
仔细想想,这两个方法声明没有区别,您将得到一个构建错误(方法签名是相同的,即使方法参数View具有不同的名称)

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

,其中您建议:

public void onClick(View setWordsView) {

  startWords();
}

public void onClick(View delWordsView) {

  deleteWords();
}
仔细想想,这两个方法声明没有区别,您将得到一个构建错误(方法签名是相同的,即使方法参数View具有不同的名称)

如果我正确理解你的问题,那么KCopock给出的答案是正确的。您还可以在graghiclayout.xml上定义一个拖放按钮 …>右键单击按钮-->选择其他属性-->选择从视图继承-->单击“单击…”将其命名为callme

这将是这样的节目:

@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
}
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" />
graghiclayout.xml上的拖放按钮 …>右键单击按钮-->选择其他属性-->选择从视图继承-->单击“单击…”将其命名为callme

这将是这样的节目:

@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
}
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" />


您是在问如何为每个按钮声明单独的onClick()方法吗?是的。我遵循KCopock的例子,但我仍然不确定该将该方法放在哪里。我是把代码塞进onCreate还是在onCreate之外?没关系,我已经掌握了窍门。谢谢大家你敢问如何为每个按钮声明单独的onClick()方法吗?是的。我遵循KCopock的例子,但我仍然不确定该将该方法放在哪里。我是把代码塞进onCreate还是在onCreate之外?没关系,我已经掌握了窍门。谢谢大家DHmm,所以这有助于创建一个案例,应用程序可以在用户单击任何按钮时找到他/她正在单击的内容?是的。这样,您只有一个侦听器,您可以将其分配给任何可单击的视图。onClick方法被传递给被单击的视图,在switch语句中,您只需为希望处理的每个视图ID添加逻辑。如果您单击的视图没有case语句,则不会发生任何事情。哦。我明白了,哇,这很有效!谢谢你的帮助!btn.setOnClickListener(新的…使用匿名内部类为每个按钮创建一个侦听器,而您允许包含您的按钮的类来处理单击操作…嗯。这是否意味着这样会消耗更多内存?在查看joseph的答案后,我现在感到困惑:SHmm,因此这有助于创建一个应用程序可以找到pe的内容的情况当rson单击任何按钮时,他/她是否正在单击?是的。因此,通过这种方式,您只有一个侦听器,您可以将其分配给任何可单击的视图。onClick方法将传递给已单击的视图,并且在switch语句中,您只需为要处理的每个视图ID添加逻辑。如果您的视图没有case语句,则我知道了,哇,这很有效!谢谢你的帮助!btn.setOnClickListener(新的…使用一个匿名的内部类为每个按钮创建一个监听器,而您允许包含您的按钮的类来处理单击操作…嗯。这是否意味着这样会消耗更多内存?在看到joseph的答案后,我现在感到困惑:Sah。所以我可以继续为每个不同的按钮声明不同的函数t按钮?顺便说一句,这应该在onCreate内部实现,对吗?P.P.S-我知道我的命名约定有点奇怪,谢谢你的提示!两个问题都是肯定的。除了你的意思是“不同的匿名内部类实现o