java—如何以最佳方式将单击的按钮发送到另一个活动?

mgdq6dx1  于 2021-06-30  发布在  Java
关注(0)|答案(6)|浏览(315)

我有一个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}

但我是按钮对象的名字。

jpfvwuh4

jpfvwuh42#

--
当您使用include标记来组成布局时,您应该为每个按钮设置不同的id(同时设置按钮文本)。您还可以使用整数作为每个按钮的标记,并将该标记发送到下一个活动(而不是id)。
查看这里的视图标记:view settag()方法

rryofs0p

rryofs0p3#

如果要发送按钮的名称,请尝试以下操作:

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

ndasle7k4#

您只需发送按钮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比发送字符串好,因为可以在接收器活动上使用比指定if/else更快的开关

baubqpgj

baubqpgj5#

要获取已单击按钮的名称,请使用 ((Button)v).getText() 方法而不是 v.toString() 返回调用对象的字符串表示:

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

ibps3vxo6#

感谢用户pozuelog提供解决方案。我将使用单独的xml文件进行布局,并通过include将其附加到主活动。
结果,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,现在就让它保持原样。

相关问题