0

AndroidスピナーonItemClickListener()に1つの問題があります。

onItemClickListener がスピナーで機能しないことはわかっているので、スピナー クラスをカスタマイズして、スピナー クラスの setOnItemClickListener() メソッドをオーバーライドします。

以下は私がカスタマイズしたコードです....

import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;

import android.widget.Spinner;

public class MySpinner extends Spinner {

private OnItemClickListener onItemClickListener;

public MySpinner(Context context) {
    super(context);
}

public MySpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MySpinner(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}


@Override
public void onClick(DialogInterface dialog, int which) {

    super.onClick(dialog, which);

    if (this.onItemClickListener != null) {

        this.onItemClickListener.onItemClick(this, this.getSelectedView(), which, this.getSelectedItemId());

    }

}

@Override
public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener l) {

    this.onItemClickListener = l;
}

}


import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;

public class SpinnerOnItemClickActivity extends Activity implements OnItemClickListener {

private MySpinner spinner;

String[] str_arr = new String[]{"abc", "efg", "hij"};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_spinner_on_item_click);

    spinner = (MySpinner) findViewById(R.id.spinner1);

    spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, str_arr));

    this.spinner.setOnItemClickListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_spinner_on_item_click, menu);
    return true;
}


@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

    Log.i("Test", "********************Spinner Item Click**************************" + position);
}
}

上記のコードは、Android バージョン 2.2 および 2.3 では完全に機能しますが、Android バージョン 4.0 以降では機能しません。

コードをデバッグしたところ、Android バージョン 4.0 でスピナー クラスの onClick() メソッドが呼び出されないことがわかりました。

どんな助けもかなりのものです。

ありがとうございました。

4

3 に答える 3

1

OnItemSelectedListenerスピナーの動作はスピナーアイテムのリストからアイテムを選択しているため、スピナーの場合は使用する必要があります。

OnItemClickListenerすべてのリスト項目があり、ListView にある項目をクリックしてそのアクションをリッスンする必要がある ListView に使用されます。

于 2012-09-24T10:28:07.537 に答える
0

次のコードを試してください。

     samplespin = (Spinner) findViewById(R.id.audspinner1);
     samplespin.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,
            long id) {
        edtsample.setText(samplevalues[position]);

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        edtsample.setText("");

    }
});

ArrayAdapter sample = new ArrayAdapter(
            this,
            android.R.layout.simple_spinner_item, 
            samplevalues);

    sample.setDropDownViewResource(
       android.R.layout.simple_spinner_dropdown_item);
    samplespin.setAdapter(sample);
于 2012-09-24T10:15:41.117 に答える
0

次のコードを試してください

    list = (Spinner)findViewById(R.id.ListView1);
    list.setAdapter(new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_single_choice, RATINGS));

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

            selected = RATINGS[arg2];

            // Toast.makeText(getApplicationContext(), selected + " selected", Toast.LENGTH_LONG).show();
        }
    });
于 2012-09-24T10:23:31.830 に答える