2017-02-16 14 views
-2

我使用以下方法創建了三個圖像視圖: ImageView imagev = new ImageView(getActivity());如何用編程創建的視圖使用onclicklistener?

現在每當我點擊這些(他們每個人)我想從字符串數組中加載一些信息。問題是這些圖像視圖是使用另一個包含drawable的數組創建的。

所以我的問題是,如何知道它是可繪製的(其中之一),但我不知道這些按鈕的id,就我所知隨機生成的onclick?我正在考慮試圖嵌套這些imageviews,他們每個人都在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); 

        } 
       } 
      }); 

不是最好的實現,但它的工作。

+0

添加您的工作! –

+0

@AtefHares,在這裏你去,我的代碼 –

+0

因爲我明白你想添加onClickListener到'imagev',是否正確? –

回答

1

要設置onClickListener到imagev,你有imagev兩個選項

1集的新聽衆如下:

使用 imagev.setId(/*int id*/);然後做就像你做 cardpicker一個id到該視圖
imagev.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //do you work 
      } 
     }); 

2-設置

檢查這些answer1answer2更多detials

+0

謝謝我已經用你的幫助解決了它 –

+0

@StanislavBondarenko不客氣 –

0

如果你創建視圖在運行時你可以保持到視圖的引用和clickListeners設置編程

1

既然你以編程方式創建的圖像視圖,可以設置的onClick聽衆也編程,如:

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

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

     } 
}); 
相關問題