首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java代码优化-两个函数合二为一

Java代码优化-两个函数合二为一
EN

Stack Overflow用户
提问于 2011-08-10 09:51:00
回答 2查看 217关注 0票数 1

你好,我有这个代码:

代码语言:javascript
复制
this.firstBtn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {

        final CharSequence[] items = {"1", "2", "3"};
        AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
        builder.setTitle("test");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
                langFrom.setText(items[item]);
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }
});

this.secondBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

            final CharSequence[] items = {"1", "2", "3"};
            AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
            builder.setTitle("test");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
                    langFrom.setText(items[item]);
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    });

只有两个不同的部分:this.firstBtnthis.secondBtn,有没有办法将它们合并?例如,当我单击firstBtn时,它调用一个函数foo(firstBtn),而secondBtn调用foo(secondBtn),其余的工作方式是一样的吗?我对语法等不太确定,因为我现在刚接触Java和Android开发。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-10 10:07:47

你想要的东西可以相对容易地完成。您可以定义一个实现OnClickListener的新类,并在这两个位置使用该类的新实例。

代码语言:javascript
复制
class MyOnClickListener implements OnClickListener {
    public void onClick(View v) {
        final CharSequence[] items = {"1", "2", "3"};
        AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
        builder.setTitle("test");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
                langFrom.setText(items[item]);
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }
}

然后,您的代码可以看起来像这样:

代码语言:javascript
复制
this.firstBtn.setOnClickListener(new MyOnClickListener());
this.secondBtn.setOnClickListener(new MyOnClickListener());

显然,如果您的两个MyOnClickListener需要稍有不同,则可以进一步采用此解决方案。这可以通过创建一个构造函数来实现,该构造函数接受您想要更改的参数,并将它们存储为成员变量,然后在调用onClick(...)时使用这些成员变量

代码语言:javascript
复制
class MyOnClickListener implements OnClickListener {
    private CharSequence[] items;

    public MyOnClickListener(CharSequence[] _items) {
        items = _items;
    }

    public void onClick(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
        builder.setTitle("test");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
                langFrom.setText(items[item]);
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }
}

然后可以像这样使用:

代码语言:javascript
复制
final CharSequence[] items1 = {"1", "2", "3"};
final CharSequence[] items2 = {"2", "3", "4"};
this.firstBtn.setOnClickListener(new MyOnClickListener(items1));
this.secondBtn.setOnClickListener(new MyOnClickListener(items2));

更新

代码语言:javascript
复制
public class SlovnikoidActivity extends Activity {
    //slovnikoidActivity definition

    //inner class definition for MyOnClickListener
    class MyOnClickListener implements OnClickListener {
        private CharSequence[] items;

        public MyOnClickListener(CharSequence[] _items) {
            items = _items;
        }

        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(SlovnikoidActivity.this);
            builder.setTitle("test");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
                    langFrom.setText(items[item]);
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2011-08-10 13:18:42

作为nicholas.hausChild的替代方案,如果你不想创建一个单独的类,就让你的activity实现View.OnClickListener

然后,将onClick(View v)方法移动到按钮代码所在的同一个类中。如果您需要区分不同的按钮,那么只需执行switch (v.getId())

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7005059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档