質問

私は、スピナー上setSelectionといくつかの問題を抱えています。スピナーは、コードに示されているとき、私は事前に選択される値を設定し、それは影響を及ぼさない、リスト内の最初の選択肢が常に選択されます。コードは次のようになります:

    LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View dialogView = li.inflate(R.layout.edit_event, null);
    ...
    ArrayList<String> routes = new ArrayList<String>();
    // routes filled with values at runtime
    ...
    ArrayAdapter<String> aa = new ArrayAdapter<String>(GOFdroid.this, android.R.layout.simple_spinner_item, routes);
    aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    Spinner destSpinner = (Spinner) dialogView.findViewById(R.id.edit_event_destination);

    String dest = events.get(pos).getDestination();
    int routesPos = routes.indexOf(dest);
    Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
    destSpinner.setSelection(routesPos);

    destSpinner.setAdapter(aa);

setSelection-一部を除いて意図したとおりにコードが動作する、と私は理由を理解することはできません。

スピナーのXMLレイアウトは、(全体ではなく、レイアウト、唯一のスピナー一部)、このようになります。

// DESTINATION
<TextView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Destination:" />
<Spinner
   android:id="@+id/edit_event_destination"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:prompt="@string/choose_dest"
   android:layout_marginBottom="10dip"
   android:text="" />

ヘルプは非常に高く評価される!

ライナス

役に立ちましたか?

解決

setSelection()を呼び出した後setAdapter()するための呼び出しを移動してみてください。

他のヒント

私は同様の問題がありました。私の場合はsetAdapersetSelectionは正しい順序でいました!実行形式のonCreateは働いたが、onResumeから実行された場合には効果がなかったです。

解決するsetSelection(my_pos, true)を呼び出すことです。二番目のパラメータに注目してください。

あなたは試してみてください。

mSpinner.post(new Runnable() {        
    public void run() {
      mSpinner.setSelection(1);
    }
  });

これは、すぐにビューが作成されるように実行するために実行可能なアクションを掲載します。

私の場合の答えのどれも働いていないので、私は

ハンドラを介してsetSelectionをキューに入れられました
new Handler().postDelayed(new Runnable() {        
    public void run() {
      mSpinner.setSelection(1);
    }
  }, 100);

遅いデバイス上で動作しているとき、これは問題を引き起こす可能性が行うが、それはこのハックを使用しても大丈夫ですので、私は、特定のデバイスのために働いている。

  
    

ソリューションは、setSelection(my_pos、true)を呼び出すことです。二番目のパラメータに注目してください。

  

ドンの `tはあなたがアニメーションを呼び出した場合、セットアップのレイアウトは、paramsは、忘れてしまった:) 例:

LinearLayout.LayoutParams spinnerLp = (LinearLayout.LayoutParams) spinner.getLayoutParams();
spinner.setSelection(selectedPositionAge, true);
spinnerLp.gravity = Gravity.CENTER;
spinner.setLayoutParams(spinnerLp);

スピナーに手動settedパディングを手動resetedする必要がある

私は、画面を回転させたときに

私はfragment : setSelection内部スピナーと同じ問題は、活動の最初の開始時にonCreate中に正しく動作しますが、いませんでした。私は、フラグメントのsetSelectionメソッド内onViewStateRestoredを呼び出す代わりにonCreateメソッド内にそれを呼び出すことによってそれを解決しました。私はわからないが、私は、ビューが完全にロードされるまで、あなたはそれをsetSelectionことができた場合でも、findViewByIdを使用することはできませんと思います。

あなたがSpinner.setSelection()前にそれを呼び出す場合Spinner.setAdapter()は動作しません。

setAdapter()を呼び出した後setSelection()を呼び出してみます。

の後ろのこの理由の:それは単にあなたはそれがどのデータか、我々が含まれていない場合にsetSelection()でカスタムインデックスにスピナーを設定しようとしていることを意味しますが、アダプタを設定する前にSpinner.Selection()を呼び出すときザッツスピナーは最大項目= 0を持っていると言うことができます。

最大アイテム= 0を有するスピナーを1にインデックスを設定する

そうsetSelection(1)手段。スピナー自体はこのoutofBoundIndexを扱いますが、あなたのアプリがありませんので、ないクラッシュします。

)(setAdapterた後でなければなりませんSetSelection()するために呼び出すだけ

また、あなたはSpinner.SetOnItemSelectedListener()を持っていて、onItemSelected(AdapterView<?> parent, View view, int position, long id)位置値= 0活動の負荷でtiggeredするという問題があり、その後、あなたは、このパターンを使用する必要があります。

Spinner.SetAdapter()
Spinner.setSelection();
Spinner.setOnItemSelectedListener();

この

を使用します
    sp2.setAdapter(sp2.getAdapter());
    sp2.getAdapter().notifyDataSetChanged();
    sp2.setSelection(0, false);

私のために働いた前の回答のなし。仕事をやった、しかし、私のフラグメントのmSpinner方法でインスタンス変数onCreateView()を作成(またはあなたの活動のonCreate()方法で)、それから...私のonLoadFinished()方法でこれをやっていた。

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    adapter.swapCursor(cursor);
    //mSpinner.setAdapter(adapter);
    mSpinner.setSelection(mSelectedIndex);
}

それは私のために働いた、これを試してみます:

Spinner destSpinner = (Spinner)dialogView.findViewById(R.id.edit_event_destination);
destSpinner.setSelection(0);
String dest = events.get(pos).getDestination();
int routesPos = routes.indexOf(dest);
destSpinner.setAdapter(aa);
Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
destSpinner.setSelection(routesPos);

時々、私たちは、スピナーが一定の値に設定することができるので、リスナーを設定し、要件ごとのように無効になっていないことがあります。

それがリスナーを必要とするので、これは、値を選択しない)(setSelectionにつながることができます。

スピナーのsetOnItemSelectedListener()は以下のようなカスタムリスナーに設定されていることを確認します。

スピナーが無効になっている場合でも、setSelection()メソッドが機能するように、

、我々は、以下のようにリスナーを設定する必要があります。

spinnerListener.setOnItemSelectedListener(spinnerListener);
AdapterView.OnItemSelectedListener spinnerListener = new 
AdapterView.OnItemSelectedListener() 
{
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
      //Your code
    }
}
spinnerListener.setSelection(0);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top