如何在编程创建的视图中使用onclicklistener?

时间:2017-02-16 18:35:02

标签: android onclicklistener

我已通过以下方式创建了三个图像视图: ImageView imagev = new ImageView(getActivity());

现在每当我点击这些(每一个)时,我想从字符串数组中加载一些信息。问题是这些图像视图是使用另一个包含drawables的数组创建的。

所以我的问题是,我知道如果知道它具有drawable(许多中的一个),我怎么能在不知道这些按钮的id的情况下进行onclick,就我所知的那样随机生成了?我正在考虑尝试嵌套这些图像视图,每个图像视图都在linearlayout中并附加onclicklistener,但它似乎是无效的,也不是优雅的尝试。

修改

    public View onCreateView(LayoutInflater inflater,
                                 ViewGroup container,
                                 Bundle savedInstanceState){


            View rootView = inflater.inflate(R.layout.majoraracane, container, false);
            ImageView cardpicker = (ImageView)rootView.findViewById(R.id.cardpick);
            ImageView imagev = new ImageView(getActivity());

            cardpicker.setOnClickListener(this);
            Resources resources = getResources();
            imagesCard = resources.obtainTypedArray(R.array.MajorArcana);
            names = resources.getStringArray(R.array.majorarcane);

            mt = new MyTask();
            mt.execute();

            return rootView;
        }

        @Override
        public void onClick(View view) {

            switch(view.getId()) {

                case R.id.cardpick:
                    rangen();
                   break;

            }
        }

public void GenNum(){

        int min = 0;
        int max = 21;
        Random r = new Random();
        i1 = r.nextInt(max - min + 1) + min;
        String wtf = names[i1];
        Log.e("random number", "generated " + i1);




        if (Arrays.asList(haha).contains(i1)){
            Log.e("HAHAH", "SAME NUMBER");
            GenNum();
        }
        else {
            ImageView imagev = new ImageView(getActivity());
            mycards.add(i1);
            int cor = i1;
            haha = new Integer[mycards.size()];
            mycards.toArray(haha);
            imagev.setImageResource(imagesCard.getResourceId(cor, R.drawable.ace_of_cups));
            int height = 230;
            int width = 135;
            LinearLayout.LayoutParams params =  new LinearLayout.LayoutParams(width, height);
            params.setMargins(5,5,5,5);

            params.gravity = Gravity.CENTER;
            imagev.setLayoutParams(params);
            LinearLayout mycardslayout = (LinearLayout)getActivity().findViewById(R.id.mycardslayout);
            imagev.animate().alpha(1.0f).setDuration(100).start();
            mycardslayout.addView(imagev);
          //  imagesCard.recycle();
        }

    }

这就是我解决它的方法: 创建了int newid。 在创建新imageview的过程中,我将newid增加了1。 然后在我的onclick中检索点击项目的ID。然后比较它。

这就是它的样子:

newid = newid +1;
imagev.setId(newid);
imagev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int ccheck = imagev.getId();

                    if(ccheck == 1){
                        Log.e("Just clicked on", "first" + ccheck);

                    } else if(ccheck == 2){
                        Log.e("Just clicked on", "second" + ccheck);

                    } else if(ccheck == 3){
                        Log.e("Just clicked on", "third" + ccheck);

                    }
                }
            });

不是最佳实施,但它正在发挥作用。

3 个答案:

答案 0 :(得分:1)

由于您是以编程方式创建图像视图,因此您还可以通过编程方式设置onClick侦听器,例如:

imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

              // Do whatever you want (imageView can be changed here)

       }
});

答案 1 :(得分:1)

要将onClickListener设置为imagev,您有两个选项

1-在imagev上设置一个新的监听器,如下所示:

   imagev.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //do you work
            }
        });

2-使用imagev.setId(/*int id*/);为该视图设置ID,然后按照cardpicker

的方式进行操作

检查这些answer1answer2以获取更多详情

答案 2 :(得分:0)

如果在运行时创建视图,则可以保留对视图的引用并以编程方式设置clickListeners