2012-05-11 5 views
0

GridView을 채우는 데 대한 ImageAdapter에 대한 질문이 있습니다. 내 Activity에 대한 코드입니다 :GridView 용 ImageAdapter가 작동하지 않습니다.

public class RestListActivity extends Activity { 
    //ImageButton [] buttons; 
    RelativeLayout rl; 
    int restCount = 0; 
    //Resources a; 
    int resIndex = 0; 
    boolean resFound = false; 
    int last; 
    int resCount = 0; 
    TextView tv; 
    ViewFlipper vf; 
    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    private GestureDetector gestureDetector; 
    View.OnTouchListener gestureListener; 
    Vector<Bitmap> iconBmp; 
    Vector<GridView> gvs; 
    Vector<ImageAdapter> ias; 

    // TODO Auto-generated constructor stub 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.restlist); 
     rl = (RelativeLayout) findViewById(R.id.layoutRestPage); 

     //a=this.getResources(); 
     boolean done = true; 

     tv = (TextView) findViewById(R.id.textView1); 
     tv.setText("Sistemi kullandığınız için teşekkür ederiz!"); 

     Button nb = (Button) findViewById(R.id.nextButton); 
     nb.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       vf.setInAnimation(RestListActivity.this, R.anim.view_right_transition_in); 
       vf.setOutAnimation(RestListActivity.this, R.anim.view_right_transition_out); 
       vf.showNext(); 
      } 
     }); 
     Button pb = (Button) findViewById(R.id.prevButton); 
     pb.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       vf.setInAnimation(RestListActivity.this, R.anim.view_left_transition_in); 
       vf.setOutAnimation(RestListActivity.this, R.anim.view_left_transition_out); 
       vf.showPrevious(); 
      } 
     }); 
     Button backButton = (Button) findViewById(R.id.restButton); 
     backButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       Log.i("ACTION", "AD BUTTON CLICKED"); 
       try { 
        Intent i = new Intent(RestListActivity.this, AVMOrderSystemMain.class); 
        startActivity(i); 
       } catch (Exception e) { 
        Log.i("cort", e.toString()); 
       } 
      } 
     }); 
     Button hb = (Button) findViewById(R.id.helpButton); 
     hb.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(RestListActivity.this, 
         "\tSiparis vermek için bir restoran reklamına tıklayarak\n" + 
           "ilgili restoranın sayfasına gidebilir, ya da restoranlar\n" + 
           "listesinden bir restoran seçerek, yine ilgili restoranın\n" + 
           "sayfasına gidebilirsiniz.\n" + 
           "\tBu sayfadan menü tercihinizi yaparak detayları belirledikten\n" + 
           "sonra siparişinizi onaylayarak ödemeniz gereken tutarı\n" + 
           "öğrenebilirsiniz\n", Toast.LENGTH_LONG).show(); 
      } 
     }); 

     gestureDetector = new GestureDetector(new MyGestureDetector()); 
     gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gestureDetector.onTouchEvent(event)) { 
        return true; 
       } 
       return false; 
      } 
     }; 
     //************************************************************************************ 
     //************************************************************************************ 
     //************************************************************************************ 
     ias = new Vector<ImageAdapter>(); 
     iconBmp = new Vector<Bitmap>(); 
     gvs = new Vector<GridView>(); 
     for (int i = 0; i < StaticParameters.getCompleteData().getRestaurantsVector().size(); i++) { 
      System.out.println("_______________________________________-_-_-_-" + 
        StaticParameters.getCompleteData().getRestaurantsVector().get(i).getActiveImage()); 
      byte[] imgBytes = FileHandler.readFile2(this, "main_icons", StaticParameters.getCompleteData().getRestaurantsVector().get(i).getActiveImage()); 
      iconBmp.add(BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length)); 
      System.out.println("///////////////77"+imgBytes.length); 
     } 
     System.out.println("))))))))))))))" + iconBmp.size()); 
     //************************************************************************************ 
     vf = (ViewFlipper) findViewById(R.id.restFlipper); 

     int count = iconBmp.size(); 
     Log.i("THE SIZE", "=" + count); 

     for (int y = 0; y < iconBmp.size(); y+=6) { 
      System.out.println("0000000000000000___"); 
      Vector<Bitmap> bmpSubSet = new Vector<Bitmap>(); 
      for (int o = 0; o < 6 && o + y < iconBmp.size(); o++) { 
       System.out.println("INSIDE!!!!"); 
       bmpSubSet.add(iconBmp.get(o + y)); 
      } 
      ImageAdapter ia = new ImageAdapter(this); 
      ia.setBitmaps(bmpSubSet); 
      ias.add(ia); 
      GridView gv = new GridView(this); 

      gv.setId(y); 
      gv.setLayoutParams(new GridView.LayoutParams(800, 600)); 
      gv.setBackgroundColor(Color.WHITE); 
      gv.setNumColumns(3); 
      gv.setColumnWidth(GridView.AUTO_FIT); 
      gv.setVerticalSpacing(5); 
      gv.setHorizontalSpacing(5); 
      gv.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); 

      System.out.println("++++++++++++++++4"+ia.restLogos.size()); 
      gv.setAdapter(ia); 
      gv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
        try { 
         /*Intent i = new Intent(RestListActivity.this,RestPageActivity.class); 
        RestPageActivity.setText(h); 
        startActivity(i);*/ 
        } catch (Exception e) { 
         Log.i("cort", e.toString()); 
        } 
       } 
      }); 
      vf.addView(gv); 
     } 

     ////////////////////////////////////////////////////// 

    } 

    class MyGestureDetector extends SimpleOnGestureListener { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      try { 
       if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
        return false; 
       // right to left swipe 
       if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        vf.setInAnimation(RestListActivity.this, R.anim.view_left_transition_in); 
        vf.setOutAnimation(RestListActivity.this, R.anim.view_left_transition_out); 
        vf.showPrevious(); 
       } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        vf.setInAnimation(RestListActivity.this, R.anim.view_right_transition_in); 
        vf.setOutAnimation(RestListActivity.this, R.anim.view_right_transition_out); 
        vf.showNext(); 
       } 
      } catch (Exception e) { 
       // nothing 
      } 
      return false; 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (gestureDetector.onTouchEvent(event)) 
      return true; 
     else 
      return false; 
    } 
} 

이 그리고 다음은 ImageAdapter입니다 :

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    private ArrayList <Integer> restLogoIDs=new ArrayList<Integer>(); 
    private Resources res; 
    Vector <Bitmap> restLogos=new Vector<Bitmap>(); 
    public ImageAdapter(Context c) { 
     mContext = c; 
    } 
    public void setResources(Resources r) 
    { 
     res=r; 
    } 
    public void setImageIDs(ArrayList <Integer> restLogoIDs) 
    { 
     this.restLogoIDs=restLogoIDs; 
    } 
    //////////////////////////////////////////////////////// 
    public void setBitmaps(Vector <Bitmap> restLogos) 
    { 
     this.restLogos=restLogos; 
     System.out.println("$$$$$$$$$$$$$$$$$$$$"+restLogos.size()); 
    } 
    //////////////////////////////////////////////////////// 
    public int getCount() { 
     return restLogoIDs.size(); 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     System.out.println("=============xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx---"+position); 
     ImageView imageView; 
     if (convertView == null) { // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(180, 180)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      //imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     //BURASI DEĞİŞECEK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     //imageView.setImageResource(restLogoIDs.get(position)); 
     imageView.setImageBitmap(restLogos.get(position)); 
     return imageView; 
    } 
    // references to our images 
} 

나는 Bitmaps의 수와 어댑터의 크기 I 메인 Activity에서 그들을 설정 한 후를 인쇄 할 때 , 나는 Bitmaps의 숫자가 정확한 것을 본다. 어떤 이유로 어댑터의 getView()이 호출되지 않습니다. GridView이 보이지만 비어 있습니다. 이걸 좀 도와 줄 수 있을까요? 어댑터의

+0

ia.notifyDatasetChanged를 호출하려면 vector.try에 항목을 추가해야합니다. –

답변

1

방법 getCount은 어떤 요소가 없다고 어댑터에 대한 0 의미를 반환하고 그것은 getView 메서드를 호출하지 않습니다 (

public int getCount() { 
     return restLogoIDs.size(); // you only instantiate restLogoIds, you never add some values to it 
} 

대신 restLogoIds 당신은 어떤 값을 지정하지 그 크기는 0입니다) restLogos을 사용합니다.이 값은 비어 있지 않으므로 일부 값을 할당하거나 어댑터를 설정할 때 restLogoIds에 일부 값을 추가하십시오.

+0

시스템 자원을 사용하고 싶지 않기 때문에 (대신에 데이터베이스에서 이미지를 동적으로 가져옵니다) 더 이상 ID를 사용하지 않습니다. 벡터의 요소 수 "restLogos"는 11을 반환합니다. 인쇄 해 보면 다음과 같이 나타납니다. – dramaticlook

+0

@dramaticlook 내 대답을 이해하지 못했습니다. ** restLogos **는'11'을 반환하지만, 당신의'getCount()'메소드에서는 ** restLogosIds ** ('0' 요소가 있음)를 사용합니다. 'getCount()'메쏘드가'0'을 반환하면 어댑터는'getView'를 호출하지 않을 것입니다. 왜냐하면 표시 할 요소가 없다고 생각하기 때문입니다. 'return restLogoIDs.size(); 대신에'getCount()'메쏘드에서'return restLogo.size();'를 써라.'setBitmaps' 메쏘드에서 다음과 같이하면된다 :'this.restLogos = restLogos; notifyDataSetChanged(); ' – Luksprog

+0

예! getCount는 추상 어댑터에서 가져온 것입니다. 나는이 응용 프로그램을 코딩하고 있었고 한 달 동안 쉬었으며 모든 것을 잊어 버렸습니다. 도와 주셔서 대단히 감사합니다 !!! – dramaticlook

관련 문제