PDA

View Full Version : دو سوال درباره ی گرید ویو (gridView)



esmail3309
چهارشنبه 22 مرداد 1393, 18:45 عصر
سلام دوستان

این سایتو ببینید:http://www.coderzheaven.com/2012/02/29/custom-gridview-in-android-a-simple-example/

من از این گرید ویو توی پروژم استفاده کردم (برای دکمه هام) حالا دوتا سوال دارم

1_برای هر دکمم دوتا تصویر selected و unselected طراحی کردم اینم کد فایل های xml یکی از دکمه هام به نام dokme_1.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:drawable="@drawable/zero_1_1_1" ></item>
<item android:state_pressed="true" android:drawable="@drawable/zero_1_1_2"></item>
<item android:drawable="@drawable/zero_1_1_1"></item>
</selector>

هالا من میخوام پس زمینه ی همه ی دکمه هامو به فایل xml مربوط به خودش تغیر بدم ولی مشکلم اینجاست که تویگرید ویوی آموزش سایت بالا نمیشه برای هردکمه ای بک گراند مجزا گذاشت!!

خب راه حل چیه؟


2-چطوری برای دکمه هام oneClicklistener قرار بدم؟


اولین باره که من از گرید ویو استفاده میکنم پس اگه لطف کنید و کامل جوابمو بدید ممنون میشم

poorman
چهارشنبه 22 مرداد 1393, 19:18 عصر
سلام

تمام این کار ها رو باید توی کلاس آداپتر گرید ویوتون که اسمش MyAdapter هست توی تابع getView انجام بدید

دقیقا توی این آموزش، جایی که داره عکس های imageView رو تنظیم میکنه، شما به جای عکس میاین از توی آرایه یا هرجایی اون فایل xml رو نسبت میدید

بعدش هم رویداد کلیک رو تعریف میکنید و میگید اگر مثلا position صفر بود ( یعنی دکمه اول ) فلان بشه و اگر position یک بود فلان و ...

shs1377
چهارشنبه 22 مرداد 1393, 19:52 عصر
شما از دو تا عکس در هر آیتم میخوای استفاده کنی؟ یعنی هم بک گراند هم یک عکس روش؟؟

esmail3309
چهارشنبه 22 مرداد 1393, 21:07 عصر
شما از دو تا عکس در هر آیتم میخوای استفاده کنی؟ یعنی هم بک گراند هم یک عکس روش؟؟

آره تغیریبا

یعنی یه عکس selected و یکی unselected
که یکی عکس عادی دکمست و دیگری عکسیه که بعد کلیک کردن روی دکمه جایگزین عکس عادی دکمه میشه

esmail3309
چهارشنبه 22 مرداد 1393, 21:42 عصر
سلام

تمام این کار ها رو باید توی کلاس آداپتر گرید ویوتون که اسمش MyAdapter هست توی تابع getView انجام بدید

دقیقا توی این آموزش، جایی که داره عکس های imageView رو تنظیم میکنه، شما به جای عکس میاین از توی آرایه یا هرجایی اون فایل xml رو نسبت میدید

بعدش هم رویداد کلیک رو تعریف میکنید و میگید اگر مثلا position صفر بود ( یعنی دکمه اول ) فلان بشه و اگر position یک بود فلان و ...


ممنون بخاطر جوا سوال اولم

ولی سوال دومم، اگه میشه با کد نویسی رویداد کلیک رو برام توضیح بدین ممنون میشم آخه دقیقا منظورتونو نفهمیدم .

اینم کدم بفرما


package com.example.clashofclansguid;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class tab_1 extends Activity {

private Integer[] mThumbIds = {
R.drawable.dokme_1,
R.drawable.dokme_2,
R.drawable.dokme_3,
R.drawable.dokme_4,
R.drawable.dokme_5,
R.drawable.dokme_6,
R.drawable.dokme_7,
R.drawable.dokme_8,
R.drawable.dokme_9,
R.drawable.dokme_10,
};


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_tab_1);

GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new MyAdapter(this));
gridview.setNumColumns(4);
}

public class MyAdapter extends BaseAdapter {

private Context mContext;

public MyAdapter(Context c) {
mContext = c;
}

@Override
public int getCount() {
return mThumbIds.length;
}

@Override
public Object getItem(int arg0) {
return mThumbIds[arg0];
}

@Override
public long getItemId(int arg0) {
return arg0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View grid;

if(convertView==null){
grid = new View(mContext);
LayoutInflater inflater=getLayoutInflater();
grid=inflater.inflate(R.layout.mygrid_layout, parent, false);
}else{
grid = (View)convertView;
}

ImageView imageView = (ImageView)grid.findViewById(R.id.image);
imageView.setImageResource(mThumbIds[position]);

return grid;
}

}

}

ممنون

shs1377
چهارشنبه 22 مرداد 1393, 23:27 عصر
ممنون بخاطر جوا سوال اولم

ولی سوال دومم، اگه میشه با کد نویسی رویداد کلیک رو برام توضیح بدین ممنون میشم آخه دقیقا منظورتونو نفهمیدم .

اینم کدم بفرما


package com.example.clashofclansguid;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class tab_1 extends Activity {

private Integer[] mThumbIds = {
R.drawable.dokme_1,
R.drawable.dokme_2,
R.drawable.dokme_3,
R.drawable.dokme_4,
R.drawable.dokme_5,
R.drawable.dokme_6,
R.drawable.dokme_7,
R.drawable.dokme_8,
R.drawable.dokme_9,
R.drawable.dokme_10,
};


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_tab_1);

GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new MyAdapter(this));
gridview.setNumColumns(4);
}

public class MyAdapter extends BaseAdapter {

private Context mContext;

public MyAdapter(Context c) {
mContext = c;
}

@Override
public int getCount() {
return mThumbIds.length;
}

@Override
public Object getItem(int arg0) {
return mThumbIds[arg0];
}

@Override
public long getItemId(int arg0) {
return arg0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View grid;

if(convertView==null){
grid = new View(mContext);
LayoutInflater inflater=getLayoutInflater();
grid=inflater.inflate(R.layout.mygrid_layout, parent, false);
}else{
grid = (View)convertView;
}

ImageView imageView = (ImageView)grid.findViewById(R.id.image);
imageView.setImageResource(mThumbIds[position]);

return grid;
}

}

}

ممنون

ببخشید استباه گذاشته بودم درست شد

باید از OnItemClick در اکتیویتی استفاده بکنی به این صورت :

gridView.setOnItemClickListener(new OnItemClickListener(){ @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent intent = new Intent();
switch(arg2){
case 0: intent.setClass(arg1.getContext(), activity1.class ); startActivity(intent); break;
case 1: intent.setClass(arg1.getContext(), activity2.class ); startActivity(intent); break;
case 2: intent.setClass(arg1.getContext(), activity3.class); startActivity(intent); break;
case 3: intent.setClass(arg1.getContext(), activity4.class ); startActivity(intent); break;
}

}});


فقط حواست باشه این رو باید بعد از خط gridview.setNumColumns(4); استفاده بکنی

به تعداد آیتم هات هم میتونی case درست کنی منظور از case 0 هم اولین آیتم هست

esmail3309
پنج شنبه 23 مرداد 1393, 08:07 صبح
باید از OnItemClick در اکتیویتی استفاده بکنی به این صورت :

gridView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent intent = new Intent();
switch(arg2){
case 0: intent.setClass(arg1.getContext(), activity1.class ); startActivity(intent); break;
case 1: intent.setClass(arg1.getContext(), activity2.class ); startActivity(intent); break;
case 2: intent.setClass(arg1.getContext(), activity3.class); startActivity(intent); break;
case 3: intent.setClass(arg1.getContext(), activity4.class ); startActivity(intent); break;
}


فقط حواست باشه این رو باید بعد از خط gridview.setNumColumns(4); استفاده بکنی

به تعداد آیتم هات هم میتونی case درست کنی منظور از case 0 هم اولین آیتم هست


ممنون ولی ایکلیپس از این خطا میگیره!!

یه کد دیگه پیدا کردم (از خود گوگل)

gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}

مثل این که درسته فقط میشه کاملش کنید؟(برای کلیک کردن)

ممنون

shs1377
پنج شنبه 23 مرداد 1393, 11:24 صبح
ممنون ولی ایکلیپس از این خطا میگیره!!

یه کد دیگه پیدا کردم (از خود گوگل)

gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}

مثل این که درسته فقط میشه کاملش کنید؟(برای کلیک کردن)

ممنون
ببخشید این پرانتز های آخر رو یادم رفته بود حالا امتحان کنید ویرایش کردم