【问题标题】:How to make shorter code如何制作更短的代码
【发布时间】:2015-08-09 11:44:44
【问题描述】:

这是我第一个应用程序的代码的一部分。目前我只添加了 2 个具有默认值 gab 的 TextView,单击它们会弹出具有 6 个值的 PopupMenu。通过单击 PopupMenu 中的任何值,TextView 的值将更改为单击的值(不更改其他未单击的 TextView 值)。我计划添加 100 个甚至更多此类 TextViews。为每个人编写、复制和编辑 ID 等都太麻烦了。

如何将其短路? 值的数量不会改变 (6),ViewId 的数量(例如 augli_mervieniba 和 Bites_mervieniba)将是巨大的。

    public void popup_mervieniba(final View view)
    {
        PopupMenu popupMenu = new PopupMenu(this, view);
        MenuInflater menuInflater = popupMenu.getMenuInflater();
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

这部分是为了如果第一个 TextView 被点击

              if (view==findViewById(R.id.augli_mervieniba))

                    switch (item.getItemId()) {
                        case R.id.gab:
                            TextView t_gab = (TextView) findViewById(R.id.augli_mervieniba);
                            t_gab.setText(R.string.gab);
                            return true;
                        case R.id.iep:
                            TextView t_iep = (TextView) findViewById(R.id.augli_mervieniba);
                            t_iep.setText(R.string.iep);
                            return true;
                        case R.id.g:
                            TextView t_g = (TextView) findViewById(R.id.augli_mervieniba);
                            t_g.setText(R.string.g);
                            return true;
                        case R.id.kg:
                            TextView t_kg = (TextView) findViewById(R.id.augli_mervieniba);
                            t_kg.setText(R.string.kg);
                            return true;
                        case R.id.ml:
                            TextView t_ml = (TextView) findViewById(R.id.augli_mervieniba);
                            t_ml.setText(R.string.ml);
                            return true;
                        case R.id.l:
                            TextView t_l = (TextView) findViewById(R.id.augli_mervieniba);
                            t_l.setText(R.string.l);
                            return true;
                }

这部分是针对点击第二个 TextView 的

            else if (view==findViewById(R.id.bietes_mervieniba))
                    switch (item.getItemId()) {
                        case R.id.gab:
                            TextView t_gab = (TextView) findViewById(R.id.bietes_mervieniba);
                            t_gab.setText(R.string.gab);
                            return true;
                        case R.id.iep:
                            TextView t_iep = (TextView) findViewById(R.id.bietes_mervieniba);
                            t_iep.setText(R.string.iep);
                            return true;
                        case R.id.g:
                            TextView t_g = (TextView) findViewById(R.id.bietes_mervieniba);
                            t_g.setText(R.string.g);
                            return true;
                        case R.id.kg:
                            TextView t_kg = (TextView) findViewById(R.id.bietes_mervieniba);
                            t_kg.setText(R.string.kg);
                            return true;
                        case R.id.ml:
                            TextView t_ml = (TextView) findViewById(R.id.bietes_mervieniba);
                            t_ml.setText(R.string.ml);
                            return true;
                        case R.id.l:
                            TextView t_l = (TextView) findViewById(R.id.bietes_mervieniba);
                            t_l.setText(R.string.l);
                            return true;
                }

代码结束

return false;
            }
        });
        menuInflater.inflate(R.menu.popup_mervieniba, popupMenu.getMenu());
        popupMenu.show();
    }

【问题讨论】:

  • 将所有视图实例化到一个地方,然后在 switch 中调用
  • 什么是R.id.bietes_mervienibaR.id.augli_mervieniba
  • 它们是TextView的id

标签: android if-statement switch-statement onclicklistener popupmenu


【解决方案1】:

这样做;

ActivityClass
{ private TextView tv1, tv2.......
onCreate()
{
tv1 = (TextView) findViewById(); 
tv2 = (TextView ) findViewById();
}

switch()
{
case R.id.gap: 
tv1.setText(); 
return;
………………
}

【讨论】:

  • 据我所知,这不会改变行数,只是让它们更短。
  • 行更短意味着代码更短更整洁。这不是你想要的吗?
猜你喜欢
  • 2018-05-03
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
相关资源
最近更新 更多