【问题标题】:Spinner OnItemClick is not getting called in android 4.0 and above在 android 4.0 及更高版本中未调用 Spinner OnItemClick
【发布时间】:2012-09-24 10:02:10
【问题描述】:

我有一个关于 android spinner 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 及更高版本。

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

任何帮助都会很重要。

谢谢。

【问题讨论】:

    标签: android spinner onitemclicklistener onitemclick


    【解决方案1】:

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

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

    【讨论】:

    • onItemClick 有很多用处,因为每次创建微调器时都会触发 onItemSelected,这违背了在用户明确选择项目时通知程序员的目的。
    【解决方案2】:

    试试下面的代码:

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

    【讨论】:

    • 我知道微调器类的 onItemSelected 方法……但我不能在我的应用程序中使用该方法……我想要微调器的 itemclick 监听器……:(
    【解决方案3】:

    好的,试试下面的代码

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多