آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

اجرا نشدن setOnItemClickListener (حل نشده-خیلی مهم)

amir Alu  12 سال پیش  12 سال پیش
+2 0

سلام. من یک image gallry ساختم که می خوام وقتی روی هر کدام از تصاویر کلیک میشه به من یک toast نمایش بده. ولی این قسمت کد کار نمیکنه. کل سورس پروژم را در زیر قرار میدم. اگر امکان داره بررسی کنید ممنون میشم.

MainAlbumGalleryDrees.class

 public class MainAlbumGalleryDrees extends Activity {
	private GridView gridView;
	private GridViewAdapter customGridAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main_album);

		gridView = (GridView) findViewById(R.id.gridView);
		customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData());
		gridView.setAdapter(customGridAdapter);

		gridView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) {
				Toast.makeText(MainAlbumGalleryDrees.this, position + "#Selected",
						Toast.LENGTH_LONG).show();
			}

		});

	}

	private ArrayList<ImageItem> getData() {
		final ArrayList<ImageItem> imageItems = new ArrayList<ImageItem>();
		// retrieve String drawable array
		TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
		for (int i = 0; i < imgs.length(); i++) {
			Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
					imgs.getResourceId(i, -1));
			imageItems.add(new ImageItem(bitmap, "Image#" + i));
		}

		return imageItems;

	}

}

 

ImageItem.class

 public class ImageItem {
	private Bitmap image;
	private String title;

	public ImageItem(Bitmap image, String title) {
		super();
		this.image = image;
		this.title = title;
	}

	public Bitmap getImage() {
		return image;
	}

	public void setImage(Bitmap image) {
		this.image = image;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
}

 

GridViewAdapter.class

 public class GridViewAdapter extends ArrayAdapter<ImageItem> {
	private Context context;
	private int layoutResourceId;
	private ArrayList<ImageItem> data = new ArrayList<ImageItem>();

	public GridViewAdapter(Context context, int layoutResourceId,
			ArrayList<ImageItem> data) {
		super(context, layoutResourceId, data);
		this.layoutResourceId = layoutResourceId;
		this.context = context;
		this.data = data;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View row = convertView;
		ViewHolder holder = null;

		if (row == null) {
			LayoutInflater inflater = ((Activity) context).getLayoutInflater();
			row = inflater.inflate(layoutResourceId, parent, false);
			holder = new ViewHolder();
			holder.imageTitle = (TextView) row.findViewById(R.id.text);
			holder.image = (ImageView) row.findViewById(R.id.image);
			row.setTag(holder);
		} else {
			holder = (ViewHolder) row.getTag();
		}

		ImageItem item = data.get(position);
		holder.imageTitle.setText(item.getTitle());
		holder.image.setImageBitmap(item.getImage());
		return row;
	}

	static class ViewHolder {
		TextView imageTitle;
		ImageView image;
	}
}

 ممنون میشم اگر راهنمایی کنید

0 0
برای GridVeiw نباید متده clickListener بنویسی. باید توی adapter برای تصاویرت onclick بنویسی (12 سال پیش)
+1 0
اگر وقت دارین میشه روی همین کد برام بنویسینش؟ اخه به ذهنم نمیرسه کجای آداپتر باید بنویسم. (12 سال پیش)
0 0
بخش لیست ویو و بخش 15، 16 آموزش هارو ببینی می تونی بسازی (12 سال پیش)
+1 0
ممنون از راهنماییت. ولی ای کاش میشد راهنماییم کنی که کجای اداپتر باید اینی که گفتی رو اضافه کنم. اما بازم ممنون (12 سال پیش)
0 0
تو آموزش های استاد کلاس adapter یه متد به اسم fill داره که برای تصویرت توی این متد رویداد onClick رو می نویسی. آموزش هارو ببینی می فهمی که چقد سادس :) (12 سال پیش)
+1 0
من اون بخشی رو که گفتید 2 برا بررسی کردم اما نتونستم اون رو به این تعمیم بدم. اخه یک جورایی با هم فرق دارن. ازتون خواهش میکنم اگر امکان داره کد من رو بررسی کنید و اشکالش به من بگین. چون حتی از position یک log هم نمیتونم بگیرم (12 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .