spinneradapter - spinner custom android studio
Cómo crear una lista de Spinner usando CustomAdapter en Android (2)
en mi aplicación, quiero crear SpinnerList usando la clase CustomAdapter, para esto escribí el código a continuación, pero cuando toco en la lista de spinner, las imágenes de la lista de matrices no se cargan en la lista de spinner como en mi pantalla a continuación ¿por qué surge este problema?
main_layout.xml: -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="Category:"
android:layout_marginBottom="5dp"/>
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Actividad principal:-
public class MainActivity extends AppCompatActivity {
public static final String[] titles = new String[] { "Strawberry",
"Banana", "Orange", "Hello" };
public static final Integer[] images = { R.drawable.image1,
R.drawable.image2, R.drawable.image3, R.drawable.image4 };
Spinner spinner;
List<RowItem> rowItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
rowItems = new ArrayList<RowItem>();
for (int i = 0; i < titles.length; i++) {
RowItem item = new RowItem(titles[i],images[i]);
rowItems.add(item);
}
spinner = (Spinner)findViewById(R.id.spinner);
CustomAdapter adapter = new CustomAdapter(MainActivity.this,
R.layout.listitems_layout, R.id.title, rowItems);
spinner.setAdapter(adapter);
}
}
listitems_layout.xml: -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/image1"
android:padding="10dp"
/>
<TextView
android:layout_marginTop="30dp"
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/icon"
android:textColor="#CC0033"
android:text="Strawberry"
android:textSize="16dp" />
</LinearLayout>
Adaptador personalizado: -
package com.example.venkat.spinnerexample1;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class CustomAdapter extends ArrayAdapter<RowItem> {
LayoutInflater flater;
public CustomAdapter(Activity context,int resouceId, int textviewId, List<RowItem> list){
super(context,resouceId,textviewId, list);
flater = context.getLayoutInflater();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RowItem rowItem = getItem(position);
View rowview = flater.inflate(R.layout.listitems_layout,null,true);
TextView txtTitle = (TextView) rowview.findViewById(R.id.title);
txtTitle.setText(rowItem.getTitle());
ImageView imageView = (ImageView) rowview.findViewById(R.id.icon);
imageView.setImageResource(rowItem.getImageId());
return rowview;
}
}
RowItem: -
package com.example.venkat.spinnerexample1;
public class RowItem {
private int ImageId;
private String Title;
public RowItem(String Title,int ImageId){
this.Title = Title;
this.ImageId = ImageId;
}
public String getTitle(){
return Title;
}
public void setTitle(String Title){
this.Title = Title;
}
public int getImageId(){
return ImageId;
}
public void setImageId(int ImageId){
this.ImageId = ImageId;
}
@Override
public String toString() {
return Title ;
}
}
Dentro del constructor de su adaptador, envíe la identificación de textview también
public CustomAdapter(Activity context,int resouceId, int textviewId, List<RowItem> list){
super(context,resouceId,textviewId, list);
flater = context.getLayoutInflater();
}
llámalo por
CustomAdapter adapter = new CustomAdapter(MainActivity.this,
R.layout.listitems_layout, R.id.title, rowItems);
EDITAR Sus imágenes no se muestran porque no anuló el método getDropdownView (). Este método decide el diseño del niño cuando el menú desplegable es visible. Entonces agregue este método a su adaptador
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = flater.inflate(R.layout.list_itemslayout,parent, false);
}
RowItem rowItem = getItem(position);
TextView txtTitle = (TextView) convertView.findViewById(R.id.title);
txtTitle.setText(rowItem.getTitle());
ImageView imageView = (ImageView) convertView.findViewById(R.id.icon);
imageView.setImageResource(rowItem.getImageId());
return convertView;
}
Sugerencia en su getView () marque (convertview == null). Es posible que no tenga ningún impacto en este pequeño adaptador, pero en caso de que su adaptador tenga más elementos, afectará el rendimiento.
EDITAR Para colocar el menú desplegable de tu ruleta debajo del ancla, usa
android:overlapAnchor="false"
dentro de tu ruleta
Change your adapter like this
public class CustomAdapter extends ArrayAdapter<RowItem> {
LayoutInflater flater;
public CustomAdapter(Activity context, int resouceId, int textviewId, List<RowItem> list){
super(context,resouceId,textviewId, list);
// flater = context.getLayoutInflater();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return rowview(convertView,position);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return rowview(convertView,position);
}
private View rowview(View convertView , int position){
RowItem rowItem = getItem(position);
viewHolder holder ;
View rowview = convertView;
if (rowview==null) {
holder = new viewHolder();
flater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowview = flater.inflate(R.layout.listitems_layout, null, false);
holder.txtTitle = (TextView) rowview.findViewById(R.id.title);
holder.imageView = (ImageView) rowview.findViewById(R.id.icon);
rowview.setTag(holder);
}else{
holder = (viewHolder) rowview.getTag();
}
holder.imageView.setImageResource(rowItem.getImageId());
holder.txtTitle.setText(rowItem.getTitle());
return rowview;
}
private class viewHolder{
TextView txtTitle;
ImageView imageView;
}
}