Java 如何在onTouch中为动态创建的按钮执行功能

Java 如何在onTouch中为动态创建的按钮执行功能,java,android,android-intent,android-fragments,android-activity,Java,Android,Android Intent,Android Fragments,Android Activity,我在RelativeLayout中设置了gallery中的图像,并尝试在onTouch期间使用单独的id动态放置按钮。现在,我正试图根据按钮id设置和获取值。(在我的代码中,现在为所有按钮获取相同的值) 我的代码: viewGroup= (ViewGroup) this.findViewById(createdPinViewGroup); viewGroup.setId(R.id.ImageId); i =0 selectedPicture.setOnTouchListener(new View

我在
RelativeLayout
中设置了gallery中的图像,并尝试在
onTouch
期间使用单独的id动态放置
按钮。现在,我正试图根据按钮id设置和获取值。(在我的代码中,现在为所有
按钮
获取相同的值)

我的代码:

viewGroup= (ViewGroup) this.findViewById(createdPinViewGroup);
viewGroup.setId(R.id.ImageId);
i =0
selectedPicture.setOnTouchListener(new View.OnTouchListener() {
@Override
 public boolean onTouch(View v, MotionEvent event) {
 int x = (int) event.getX();
 int y = (int) event.getY();
 rparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
 rparams.addRule(RelativeLayout.ACCESSIBILITY_LIVE_REGION_ASSERTIVE);
 rparams.leftMargin = x;
 rparams.topMargin = y;
 rparams.height = 48;
 rparams.width = 60;
 btn = new Button(getBaseContext());
 btn.setId(i + 1);
 btn.setText("B" + i);
 btn.setLayoutParams(rparams);
 viewGroup.addView(btn);
 i++;

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(getBaseContext(), "Button is Clicked", Toast.LENGTH_LONG).show();
});

您可以在onclick本身中获取id,请尝试以下操作

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    Toast.makeText(getBaseContext(), "Button is Clicked "+v.getId(), Toast.LENGTH_LONG).show();

}))

试试这些,可能对你有用:

 Button[] btn = new Button[100];

 viewGroup= (ViewGroup) this.findViewById(createdPinViewGroup);
 viewGroup.setId(R.id.ImageId);
 i =0
 selectedPicture.setOnTouchListener(new View.OnTouchListener() {
 @Override
 public boolean onTouch(View v, MotionEvent event) {
 int x = (int) event.getX();
 int y = (int) event.getY();
 rparams = new   
 RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,   
 RelativeLayout.LayoutParams.WRAP_CONTENT);
 rparams.addRule(RelativeLayout.ACCESSIBILITY_LIVE_REGION_ASSERTIVE);
 rparams.leftMargin = x;
 rparams.topMargin = y;
 rparams.height = 48;
 rparams.width = 60;
 i++;
 btn[i] = new Button(getBaseContext());
 btn[i].setId(i + 1);
 btn[i].setText("B" + i);
 btn[i].setLayoutParams(rparams);
 viewGroup.addView(btn);

 btn[i].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            //your desired functionality 
         } 
      }); 
    } 

什么是“我”?你为什么用?这会在视图中添加多个按钮,您正在执行i+1操作,因此i的值不会改变。将i+1更改为i++。我的坏消息是,你最后在做i++设置按钮id。@AnandMakwana“i”。按钮的setonclick侦听器代码在哪里?。它应该在按钮的范围内。发布完整代码。我正在获取id,但我必须根据id设置值。这就是问题所在。之后,根据id检索值Younwana获取单击按钮的文本值是多少?或其他任何内容。请明确问题I get result。现在我将详细信息保存在Hashmap中,并从Hashmap中检索。谢谢,好的,谢谢。每次创建按钮时,我都必须设置不同的值。所以我使用哈希映射来保存。在按钮上单击检索值,该值已保存在按钮创建中。如果我使用btn[i],它会发生错误。请更具体一点。当错误发生时。你能把错误贴在这里吗04-29 00:33:21.690 E/InputEventReceiver﹕ 异常调度输入事件。04-29 00:33:21.690 E/MessageQueue JNI﹕ MessageQueue回调中出现异常:HandlerReceiveCallback 04-29 00:33:21.700 E/MessageQueue JNI﹕ android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1880)中的android.view.view.view.dispatchTransformedTouchEvent(ViewGroup.java:2173)中的android.view.view.view.view.dispatchTouchEvent(ViewGroup.java:1908)中的java.lang.NullPointerException不。现在我正在处理散列映射,以在按钮创建中存储值。无法获取依赖于HashMap键集的值。将值放入HashMap的代码,HashMap HashMap=newHashMap();put(btn.getId(),list);HashMap检索值,btn.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图v){int btnid=v.getId();for(Integer ihashId:HashMap.keySet()){if(btnid==ihashId){