当用户长时间点击某个项目时,我试图使Spinner的行为方式不同。我有一些项目的旋转器,我想要两件事。
第一步效果很好(当然),但是当我尝试执行第二项任务时,我无法使微调器生成longClicked事件。
这是我的代码:
this.projectSpinner = (Spinner) this.findViewById(R.id.SpinnerProjects);
this.projectSpinner.setLongClickable(true);
this.projectSpinner.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1,
int arg2,
long arg3) {
Toast.makeText(
AndroidTimeTrackerMainActivity.this,
"Long click",
Toast.LENGTH_SHORT).show(); // This toast doesn't show up.
return false;
}
});
答案 0 :(得分:15)
Spinner
目前不支持OnItemLongClickListener
。
答案 1 :(得分:7)
您可以将OnLongClickListener添加到Spinner中。当菜单上的项目被长时间点击时,它不会被触发,但是当用户长时间点击微调器时,它将被触发。
this.projectSpinner.setOnLongClickListener(new OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
System.out.println(chuteSpinner.getSelectedItem().toString() + " is long clicked");
return true;
}
});
答案 2 :(得分:1)
1)通过扩展微调器
来创建自定义微调器类public class CCSpinner extends Spinner {
public CCSpinner(Context context) {
super(context);
}
public CCSpinner(Context context, int mode) {
super(context, mode);
}
public CCSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CCSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CCSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode) {
super(context, attrs, defStyleAttr, mode);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
}
在xml视图中使用上面的微调器。
2)定义一个处理点击的界面,
public interface ClickListener {
void onItemLongClicked(View view);
void onItemClicked(View view);
}
3)在你的微调器适配器类中,在getView和getDropDownView
中执行这些操作@Override
public View getView(int position, View convertView, ViewGroup parent) {
//ususal stuffs
convertView.setTag(R.string.click_tag, position);
convertView.setClickable(false);
convertView.setLongClickable(false);
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
//ususal stuffs
convertView.setTag(R.string.click_tag, position);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickListener != null) {
clickListener.onItemClicked(v);
}
}
});
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (clickListener != null) {
clickListener.onItemLongClicked(v);
}
return true;
}
});
return convertView;
}
4)在实例化适配器时,传递我们创建的ClcikListener接口。
5)并在实施类中执行以下操作,
@Override
public void onItemLongClicked(final View view) {
mPSpinner.onDetachedFromWindow();
final int pos = (int) view.getTag(R.string.click);
mPSpinner.setSelection(pos);
}
@Override
public void onItemClicked(final View view) {
mPSpinner.onDetachedFromWindow();
int pos = (int) view.getTag(R.string.click);
mPSpinner.setSelection(pos);
}
答案 3 :(得分:0)
只需使用带处理程序的touchlistener。获取所选项目
spinner.getSelectedItemPosition