如何最佳地将点击按钮发送到另一个活动?

时间:2015-01-15 08:36:47

标签: java android object

我有一个带有10个按钮的活动,并且关于按钮的转移信息被点击到下一个活动。

    View.OnLongClickListener olongBtn = new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {

            if (v == btn1) {
                Intent intent = new Intent(MainActivity.this, AddContact.class);
                intent.putExtra("slot", "slot1");
                startActivity(intent);
            } else if (v == btn2) {
                Intent intent = new Intent(MainActivity.this, AddContact.class);
                intent.putExtra("slot", "slot2");
                startActivity(intent);
            } else if (v == btn3) {
                Intent intent = new Intent(MainActivity.this, AddContact.class);
                intent.putExtra("slot", "slot3");
                startActivity(intent);
            }
            return false;
        }
    };

    btn1.setOnLongClickListener(olongBtn);
    btn2.setOnLongClickListener(olongBtn);
    btn3.setOnLongClickListener(olongBtn);

}

我想像这样改变它

String slot = toString(v);
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", slot);
startActivity(intent);

但是当我这样做时,我接下来的活动是这样的:

android.widget.Button{6548fcd}VFED..CL...P....17.0-147.130 #7f08004f app:id/btnPayman}

但我是按钮对象的期望名称。

4 个答案:

答案 0 :(得分:1)

要获取单击按钮的名称,请使用((Button)v).getText()方法而不是v.toString()返回调用Object的String表示形式:

String slot = (Button)v).getText().toString();
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", slot);
startActivity(intent);

答案 1 :(得分:1)

您只需发送按钮ID即可。

    View.OnLongClickListener olongBtn = new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
            Intent intent = new Intent(MainActivity.this, AddContact.class);
            intent.putExtra("slot", v.getId());
            startActivity(intent);
        return false;
    }
};

在下一个活动中,您可以使用开关来了解按下了什么按钮:

  int buttonId = getIntent().getIntExtra("slot", 0);
    switch() {
        case R.id.firstbutton:
            //Do what you want
            break;
        case R.id.secondbutton:
            //Do What you whant
    }

发送int比发送一个String更好,因为你可以在接收器活动上使用一个开关,比if / else

更快。

----------------------- EDIT ---------------------- < / p>

在使用include标签构建布局时,应该为每个按钮设置不同的id(同时设置Button文本)。您还可以将Integer用作每个按钮的标记,并将该标记发送到下一个活动(而不是id)。

在此处查看视图标记:View setTag() method

答案 2 :(得分:0)

如果您想发送按钮的名称,请尝试:

String slot = ((Button) v).getText().toString();
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", slot);
startActivity(intent);

答案 3 :(得分:0)

感谢用户pozuelog寻求解决方案。 我使用单独的xml文件进行布局,并通过include将其附加到main_activity。

结果,getId方法对我不起作用。

解决方案为我的按钮设置了标记。

    btn1.setTag(1);
    btn2.setTag(2);
    btn3.setTag(3);

    View.OnLongClickListener olongBtn = new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {

                Intent intent = new Intent(MainActivity.this, AddContact.class);
                intent.putExtra("slot", String.valueOf(v.getTag()));
                startActivity(intent);

            return false;
        }
    };

    btn1.setOnLongClickListener(olongBtn);
    btn2.setOnLongClickListener(olongBtn);
    btn3.setOnLongClickListener(olongBtn);

我认为该解决方案可能会进行优化,但我是googlecoder并暂时保留原样。