ה-Adapter הוא כמו גשר בין התצוגה לתוכן המוכל בו. הוא אחראי לייצר תצוגה מותאמת אישית עבור כל פריט. יש לו ארועים משלו, תוכן משלו וכו וכו.
לאדפטר את מכילה Layout מסויים. את יכולה אפילו לכל שורה לייאוט שונה, זה את עושה בפונקציה: getView. שם את מגדירה מי הlayout שלו, מה הוא מכיל, איזה טקסטים וכו וכו... ממש כמו activity.
מצרפת דוגמא של basicAdapter:
קוד ב activity
private ListView list; private final ArrayList<RestaurantsDetails> pairs = new ArrayList<RestaurantsDetails>(); private Activity context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pairs.add(new RestaurantsDetails("McDonald's", "mcd")); pairs.add(new RestaurantsDetails("Subway", "mcd")); pairs.add(new RestaurantsDetails("Pizza Hut", "mcd")); pairs.add(new RestaurantsDetails("Burger King", "mcd")); list = (ListView) findViewById(R.id.listview); AdapterViewCustom adapter = new AdapterViewCustom(this, pairs); list.setAdapter(adapter); list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { @Override public void onItemClick(android.widget.AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), pairs.get(position).name, Toast.LENGTH_LONG).show(); } }); }
מחלקת dataLayer
public class RestaurantsDetails { public String name; public String img; public RestaurantsDetails(String name, String img) { this.name = name; this.img = img; } }
מחלקת ה adapter
public class AdapterViewCustom extends BaseAdapter { private Activity context_1; private ArrayList<RestaurantsDetails> pairs; public AdapterViewCustom(Activity context, ArrayList<RestaurantsDetails> pairs) { context_1 = context; this.pairs = pairs; } @Override public int getCount() { return pairs.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = LayoutInflater.from(context_1).inflate( R.layout.custom_row, null); viewHolder = new ViewHolder(); viewHolder.img = (ImageView) convertView .findViewById(R.id.log_img); viewHolder.txt = (TextView) convertView .findViewById(R.id.tv_view); /** * At very first time when the List View row Item control's * instance is created it will be store in the convertView as a * ViewHolder Class object for the reusability purpose **/ convertView.setTag(viewHolder); } else { /** * Once the instance of the row item's control it will use from * already created controls which are stored in convertView as a * ViewHolder Instance * */ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.txt.setText(pairs.get(position).name); int id = context_1.getResources().getIdentifier( pairs.get(position).img, "drawable", context_1.getPackageName()); viewHolder.img.setImageResource(id); return convertView; } public class ViewHolder { public final ImageView img; public final TextView txt; } }
כדאי שתקראי על הנושא קצת באינטרנט ותחליטי איזה סוג של אדפטר מתאים לך בדיוק.
חני תודה רבה על תשובתך המהירה והברורה כעת נתקעתי בעוד בעיה ואולי תוכלי לעזר לי מקווה שאני לא יור מידי מפריעה אחד הנתונים שלי הוא מסוג date ואני גם רוצה להראות את זה בtextView dateF.setText(currentForm.getDate());
Cannot resolve method 'setText(java.util.Date)'והוא צועק לי שהוא לא יכול האם את יודעת איך אפשר לסדר את זה?
תודה רבה על תשובתך אבל השאלה שלי ממשיכה מכיוון שהיא יותר מוכבת
- אולי תוכלי לעזר לי או לתת לי כיוון מה כדאי לי לעשות אם אני צריכה item שכל listView להראות
הוא כפתור או משהו אחר הניתן ללחיצה והוא יראה כבר - (שעליו יהיה רשום) נתונים בטקסטים של גדלים שונים וגם אייקונים ליד הטקסטים
ובעיקר מה שאני צריכה שבכל כפתור יהיה לי תוכן אחר שבא ממערכים שונים או מאובייקט כלשהו. אני התחלתי לעשות את זה אם אדאפטר שמכניס לי את כל הנתונים של המערך בכפתורים אבל אני מצליחה רק טקסט אחד ואני בעצם צריכה משהו הרבה יותר מורכב האם אני באמת יעשה את זה קודם בלייאות כלשהו ואתו אני אציג כל פעם ברשימה אבל אז אני צריכה שיהיה כל פעם טקסט אחר ב textView ים
אם את מתכוונת שתוכלי להחליף את התמונה/ הטקסט של הכפתור אז אפשר באמצעות:Button btn = findViewById(R.id.btnId); btn.setText("the text you want") ;בשביל תמונה:btn.setImageResource(...)אם התכוונת לכך שתוכלי ל"אחד " כמה תמונות להיות על כפתור אחד בו זמנית אז לדעתי תערכי את התמונות בתוכנה גרפית ותתייחסי לזה כתמונה אחת.
כמו שכתבת את צריכה Adapter.
ה-Adapter הוא כמו גשר בין התצוגה לתוכן המוכל בו. הוא אחראי לייצר תצוגה מותאמת אישית עבור כל פריט. יש לו ארועים משלו, תוכן משלו וכו וכו.
לאדפטר את מכילה Layout מסויים. את יכולה אפילו לכל שורה לייאוט שונה, זה את עושה בפונקציה: getView. שם את מגדירה מי הlayout שלו, מה הוא מכיל, איזה טקסטים וכו וכו... ממש כמו activity.
מצרפת דוגמא של basicAdapter:
קוד ב activity
private ListView list; private final ArrayList<RestaurantsDetails> pairs = new ArrayList<RestaurantsDetails>(); private Activity context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pairs.add(new RestaurantsDetails("McDonald's", "mcd")); pairs.add(new RestaurantsDetails("Subway", "mcd")); pairs.add(new RestaurantsDetails("Pizza Hut", "mcd")); pairs.add(new RestaurantsDetails("Burger King", "mcd")); list = (ListView) findViewById(R.id.listview); AdapterViewCustom adapter = new AdapterViewCustom(this, pairs); list.setAdapter(adapter); list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { @Override public void onItemClick(android.widget.AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), pairs.get(position).name, Toast.LENGTH_LONG).show(); } }); }
מחלקת dataLayer
public class RestaurantsDetails { public String name; public String img; public RestaurantsDetails(String name, String img) { this.name = name; this.img = img; } }
מחלקת ה adapter
public class AdapterViewCustom extends BaseAdapter { private Activity context_1; private ArrayList<RestaurantsDetails> pairs; public AdapterViewCustom(Activity context, ArrayList<RestaurantsDetails> pairs) { context_1 = context; this.pairs = pairs; } @Override public int getCount() { return pairs.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = LayoutInflater.from(context_1).inflate( R.layout.custom_row, null); viewHolder = new ViewHolder(); viewHolder.img = (ImageView) convertView .findViewById(R.id.log_img); viewHolder.txt = (TextView) convertView .findViewById(R.id.tv_view); /** * At very first time when the List View row Item control's * instance is created it will be store in the convertView as a * ViewHolder Class object for the reusability purpose **/ convertView.setTag(viewHolder); } else { /** * Once the instance of the row item's control it will use from * already created controls which are stored in convertView as a * ViewHolder Instance * */ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.txt.setText(pairs.get(position).name); int id = context_1.getResources().getIdentifier( pairs.get(position).img, "drawable", context_1.getPackageName()); viewHolder.img.setImageResource(id); return convertView; } public class ViewHolder { public final ImageView img; public final TextView txt; } }
כדאי שתקראי על הנושא קצת באינטרנט ותחליטי איזה סוג של אדפטר מתאים לך בדיוק.
תסמני מה התשובה הנכונה
סליחה בטעות נשלח ה"תודה רבה" הקודם
צודקת ב100% מעכשיו אני אפתח שאלה חדשה בשביל שזה יעזר באמת לכולם
תודה רבה
חני. הסתדרתי הוספתי .toString()
חני תודה רבה על תשובתך המהירה והברורה כעת נתקעתי בעוד בעיה ואולי תוכלי לעזר לי מקווה שאני לא יור מידי מפריעה אחד הנתונים שלי הוא מסוג date ואני גם רוצה להראות את זה בtextView dateF.setText(currentForm.getDate());
Cannot resolve method 'setText(java.util.Date)' והוא צועק לי שהוא לא יכול האם את יודעת איך אפשר לסדר את זה?
תודה רבה על תשובתך אבל השאלה שלי ממשיכה מכיוון שהיא יותר מוכבת
- אולי תוכלי לעזר לי או לתת לי כיוון מה כדאי לי לעשות אם אני צריכה item שכל listView להראות
הוא כפתור או משהו אחר הניתן ללחיצה והוא יראה כבר - (שעליו יהיה רשום) נתונים בטקסטים של גדלים שונים וגם אייקונים ליד הטקסטים
ובעיקר מה שאני צריכה שבכל כפתור יהיה לי תוכן אחר שבא ממערכים שונים או מאובייקט כלשהו. אני התחלתי לעשות את זה אם אדאפטר שמכניס לי את כל הנתונים של המערך בכפתורים אבל אני מצליחה רק טקסט אחד ואני בעצם צריכה משהו הרבה יותר מורכב האם אני באמת יעשה את זה קודם בלייאות כלשהו ואתו אני אציג כל פעם ברשימה אבל אז אני צריכה שיהיה כל פעם טקסט אחר ב textView ים
אשמח לכל מידע בעניין שיכול לעזר לי
תודה רבה מראש על העינותכן
אם התכוונת שיהיו כמה טקסטים עם סוגים שונים של פונטים, תעשי Layout מסויים, תעצבי אותו כמו כפתור ותחילי עליו ארוע קליק
אם את מתכוונת שתוכלי להחליף את התמונה/ הטקסט של הכפתור אז אפשר באמצעות: Button btn = findViewById(R.id.btnId); btn.setText("the text you want") ; בשביל תמונה: btn.setImageResource(...) אם התכוונת לכך שתוכלי ל"אחד " כמה תמונות להיות על כפתור אחד בו זמנית אז לדעתי תערכי את התמונות בתוכנה גרפית ותתייחסי לזה כתמונה אחת.
מקווה שהועלתי...