ImageAdapter for GridView无法正常运行

时间:2012-05-11 04:32:20

标签: android gridview custom-adapter

我对填充ImageAdapter的{​​{1}}有疑问。以下是我GridView的代码:

Activity

以下是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和适配器中的大小后,我看到Activity的数量是正确的。出于某种原因,未调用适配器的Bitmaps。我可以看到getView(),但它是空的。我可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分: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