PDA

View Full Version : ساخت یک spinner سفارشی



nassim_20
جمعه 22 شهریور 1398, 12:52 عصر
سلام
میخوام یه اسپینر سفارشی بسازم که هر یک از ایتم ها یه تصویر کنارش باشه که با انتخاب اون تصویر imageview که در همون صفحه هست تغییر کنه
کسی می تونه راهنمایی کنه
ممنون

nassim_20
شنبه 23 شهریور 1398, 11:39 صبح
بالاخره خودم جواب رو پیدا کردم
اینجا میزارم که شاید سوال یه نفر دیگه هم باشه

1-
اول باید یه لایه طراحی کنیم که در این پروژه به اسم layoutspinner که داخل لایه یه Textview و یه ImageView در یک لایه افقی و اون لایه در یک لایه عمودی قرار دارد


2-
این کد کامل فایل MainActivity هست

package com.PRG.customspinner;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;

public class MainActivity extends Activity {
Spinner spinner;
ImageView imageView1;
List <String> list;
CustomAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner) findViewById(R.id.spinner);
imageView1 = (ImageView) findViewById(R.id.imageView1);

list = new ArrayList<String>();
list.add("Android");
list.add("IOS");
list.add("Linux");
list.add("Windows Phone");
adapter = new CustomAdapter(this, R.layout.layoutspinner, R.id.textView1, list);
spinner.setAdapter(adapter);
}

}



3-
بعد باید کلاس ArrayAdapter رو شخصی سازی کنیم
اینهم کل کلاس هست که به نام CustomAdapter نوشته میشه

package com.PRG.customspinner;

import java.util.List;

import com.PRG.customspinner.R.id;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAdapter extends ArrayAdapter<String> {
Context context;
List <String> list;

public CustomAdapter(Context context, int resource, int textViewResourceId, List<String> objects) {
super(context, resource, textViewResourceId, objects);
// TODO Auto-generated constructor stub
this.context = context;
this.list = objects;
}

@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return view(position, convertView, parent);
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return view(position, convertView, parent);
}


private View view(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLA TER_SERVICE);

View view = inflater.inflate(R.layout.layoutspinner, parent, false);

TextView textView1 = (TextView) view.findViewById(R.id.textView1);
ImageView imageView1 = (ImageView) view.findViewById(R.id.imageView1);

textView1.setText(this.list.get(position));
Drawable drawable= null;
if(position == 0){
drawable = this.context.getResources().getDrawable(R.drawable .ic_android);
}else if (position == 1) {
drawable = this.context.getResources().getDrawable(R.drawable .ic_ios);
}else if (position == 2) {
drawable = this.context.getResources().getDrawable(R.drawable .ic_linux);
}else if (position == 3) {
drawable = this.context.getResources().getDrawable(R.drawable .ic_windowsphone);
}


imageView1.setImageDrawable(drawable);

return view;
}



}