2017-04-03 6 views
1

私はスピナーに問題がありますが、1つのアイテムを選択できません。私はたくさんのことを試みましたが、それでも動作しません。Androidカスタムスピナーがオプションを選択して表示できません

絵は、私はそれがアイテム[Image-2]

を示すが、私は1つを選択すると、何もhappendsない矢印をクリックすると、スピナーが時に活動負荷Image-1

空白であることを示しています。

<?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> 

これはアクティビティのレイアウトです。

私のアダプタで、以下の私の活動であるスピナー

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); 
    } 
} 

用のカスタムレイアウトである

<?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> 

コールアダプタのように:

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

アダプタクラスで:

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) { 

      } 
     }); 
    } 
+0

なぜあなたは 'adapter.notifyDataSetChanged()'を呼び出していますか? – AwaisMajeed

+0

私はインターネットでそれを見たので、私は必死であったので、それが機能するかどうかを確認するために追加しようとしました。 –

+0

あなたはlistaCombo – AwaisMajeed

答えて

0

これは変更してくださいあなたのgetView()メソッド内でも

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); 
    } 

膨らまレイアウトのように:

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

Androidスタジオでは私を使用できません:スーパー(コンテキスト、resouceId、textviewId、リスト);親は0パラメータを期待すると述べた。それらを使用しないとエラーが発生した場合:java.lang.NullPointerException:nullオブジェクト参照で仮想メソッド 'java.lang.Object android.app.Activity.getSystemService(java.lang.String)'を呼び出しようとしました。java .lang.Objectヌルオブジェクトリファレンスで –

+0

を使用すると、android.app.Activity.getSystemService(java.lang.String) 'が使用されます。代わりに、 'public Class ComboAdapter extends ArrayAdapter ' ...の代わりにbaseAdapter – rafsanahmad007

関連する問題