Spinner OnItemClick 在 android 4.0 及更高版本中未被调用



我对android微调器onItemClickListener()有一个问题。

我知道 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 及更高版本。

我已经调试了代码,发现微调器类的 onClick() 方法在 Android 4.0 版本中没有被调用。

任何帮助都是可观的。

谢谢。

对于微调器,您必须使用OnItemSelectedListener因为微调器的行为是从微调器项列表中选择项。

OnItemClickListener用于列表视图,其中您拥有所有列表项,您必须单击 ListView 中的项并侦听其操作。

尝试以下代码:

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

好的,请尝试以下代码

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

相关内容

  • 没有找到相关文章

最新更新