Android Custom Spinner无法选择并显示它

时间:2017-04-03 07:28:11

标签: android spinner retrofit2

我有旋转器的问题,它不允许我选择一个项目。我尝试了很多东西但仍然没有用。

图片显示,当活动加载Image-1

时,微调器处于空白状态

当我点击箭头时,它会显示项目[Image-2]

但是当我选择一个时,没有任何事情发生。

   <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context=".Activities.Inspeccion.DatosGeneralesActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView"
        >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="15dp"
            >
            <TextView
                android:id="@+id/tvSubestacionTitulo"
                android:layout_below="@+id/imgLogo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/strSubestacion"
                android:textSize="18sp"
                android:textColor="@color/colorPrimaryDark"
                android:textStyle="bold"
                />
            <TextView
                android:id="@+id/tvSubestacionDato"
                android:layout_below="@+id/tvSubestacionTitulo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="12sp"
                android:text="Prueba"
                />
            <Spinner
                android:id="@+id/spinnerSubEstacion"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/tvSubestacionDato"
                >
            </Spinner>
        </RelativeLayout>        
    </ScrollView>
</RelativeLayout>

这是活动的布局。

    <?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="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tvNumeroOpcion"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="5dp"
        android:text="1"
        android:textColor="@color/black"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/tvDescriptionOption"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="5dp"
        android:text="Guatemala"
        android:textColor="@color/black"
        android:textSize="14sp" />
</LinearLayout>

这是微调器的自定义布局

Public class ComboAdapter extends BaseAdapter{


    private List<Combo> combos;
    private Activity activity;
    private LayoutInflater inflater;

    public ComboAdapter(List<Combo> combos, Activity activity) {

        this.combos = combos;
        this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return combos.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

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

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

        if (convertView == null){
            view = inflater.inflate(R.layout.combo_list_item, null);

            TextView tvId = (TextView) view.findViewById(R.id.tvNumeroOpcion);
            TextView tvDescripcion = (TextView) view.findViewById(R.id.tvDescriptionOption);

            tvId.setText(combos.get(position).getId());
            tvDescripcion.setText(combos.get(position).getDescripcion());
        }
               return view;
    }

    @Override
    public View getDropDownView(int position, View convertView,
                                ViewGroup parent) {
        return getView(position, convertView,parent);
    }
}

这是我的适配器

以下是我的活动。

public class DatosGeneralesActivity extends AppCompatActivity {

    private TextView tvSubestacionDato;

    private List<Combo>  listaCombo;

    private Spinner spinnerSubestacion;

    private ArrayAdapter<Combo> adapterSubestacion;

    String seleccion;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_datos_generales);
        //Inicializando textos
        tvSubestacionDato = (TextView) findViewById(R.id.tvSubestacionDato);

        //Inicializanco listas
        listaCombo = new ArrayList<>();

        //Inivializando spinners
        spinnerSubestacion = (Spinner) findViewById(R.id.spinnerSubEstacion);


        AppService service = API.getCombos().create(AppService.class);
        Call<List<Combo>> subestacionCall = service.getSubestacion();

        subestacionCall.enqueue(new Callback<List<Combo>>() {
            @Override
            public void onResponse(Call<List<Combo>> call, Response<List<Combo>> response) {
                listaCombo.clear();
                listaCombo.addAll(response.body());
            }

            @Override
            public void onFailure(Call<List<Combo>> call, Throwable t) {

            }
        });

        //final ComboAdapter adapter = new ComboAdapter(listaCombo, DatosGeneralesActivity.this);
        final ArrayAdapter<Combo> adapter = new ArrayAdapter<Combo>(this, R.layout.support_simple_spinner_dropdown_item, listaCombo);
        spinnerSubestacion.setAdapter(adapter);

        spinnerSubestacion.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                adapter.notifyDataSetChanged();
                Toast.makeText(DatosGeneralesActivity.this, ""+position, Toast.LENGTH_SHORT).show();
                tvSubestacionDato.setText(listaCombo.get(position).getDescripcion());
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

1 个答案:

答案 0 :(得分:0)

尝试此更改:

调用适配器,如:

ComboAdapter adapter = new ComboAdapter(DatosGeneralesActivity.this,
            R.layout.combo_list_item, R.id.tvDescriptionOption, listaCombo);

现在在适配器类中:

 public ComboAdapter(Activity context,int resouceId, int textviewId, List<Combo> list){

        super(context,resouceId,textviewId, list);
        this.combos = list;
        this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

同样在你的getView()方法扩展布局中,如:

if (convertView == null){
     view = inflater.inflate(R.layout.combo_list_item, parent , false);