bli*_*uff 36 java android onclick spinner
我试图让一个onClickListener在Spinner上触发,但是我收到以下错误:
Java.lang.RuntimeException是"不要为AdapterView调用setOnClickListener.你可能需要setOnItemClickListener,"
我确定我想调用onClickListener而不是onItemClickListener.我在Stack Overflow上找到了其他人提出的问题,有没有办法将setOnClickListener与Android Spinner一起使用?
答案说:
您必须在微调器的基础视图(通常是带有id:android.R.id.text1的TextView)上设置Click侦听器.为此:
创建自定义Spinner在构造函数(带属性)中通过提供布局android.R.layout.simple_spinner_item来创建微调器.执行findViewById(android.R.id.text1)以获取TextView现在将onClickListener设置为TextView
我已经尝试过那里提到的答案,但它似乎没有用.我在执行findViewById()后得到一个指向TextView的空指针.
这就是我正在做的事情:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.layoutspinner,dataArray);
spinner.setAdapter(adapter);
TextView SpinnerText = (TextView)findViewById(R.id.spinnerText);
if (SpinnerText == null) {
System.out.println("Not found");
}
else {
SpinnerText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//Do something
}
});
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerText"
android:singleLine ="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="6pt"
android:gravity="right"/>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我是Stack Overflow的新手,我没有找到任何办法向另一个帖子发布一个aditional问题(或评论,因为我需要很少代表)所以我开始了一个新问题.
每个推荐我试过这个:
int a = spinnerMes.getCount();
int b = spinnerMes.getChildCount();
System.out.println("Count = " + a);
System.out.println("ChildCount = " + b);
for (int i = 0; i < b; i++) {
View v = spinnerMes.getChildAt(i);
if (v == null) {
System.out.println("View not found");
}
else {
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Click code
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
但LogCat没有显示出有希望的结果.
10-14 16:09:08.127: INFO/System.out(3116): Count = 7
10-14 16:09:08.127: INFO/System.out(3116): ChildCount = 0
Run Code Online (Sandbox Code Playgroud)
我已经在API级别7和8上对此进行了测试,结果相同.
Ofe*_*erR 59
这是一个有效的解决方案:
我们设置OnTouchListener和OnKeyListener,而不是设置微调器的OnClickListener.
spinner.setOnTouchListener(Spinner_OnTouch);
spinner.setOnKeyListener(Spinner_OnKey);
Run Code Online (Sandbox Code Playgroud)
和听众:
private View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
doWhatYouWantHere();
}
return true;
}
};
private static View.OnKeyListener Spinner_OnKey = new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
doWhatYouWantHere();
return true;
} else {
return false;
}
}
};
Run Code Online (Sandbox Code Playgroud)
Gau*_*ora 29
每当您必须在Android中单击Spinner时执行某些操作,请使用以下方法.
mspUserState.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
doWhatIsRequired();
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
要记住的一件事是在使用上述方法时始终返回False.如果您将返回True,则单击微调器时不会显示微调器的下拉项.
小智 15
就个人而言,我用它:
final Spinner spinner = (Spinner) (view.findViewById(R.id.userList));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
userSelectedIndex = position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Run Code Online (Sandbox Code Playgroud)
首先,微调器不支持项目点击事件.调用此方法将引发异常.
您可以使用setOnItemSelectedListener:
Spinner s1;
s1 = (Spinner)findViewById(R.id.s1);
int selectionCurrent = s1.getSelectedItemPosition();
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
if (selectionCurrent != position){
// Your code here
}
selectionCurrent= position;
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// Your code here
}
});
Run Code Online (Sandbox Code Playgroud)
以下工作如何你想要它,但它并不理想。
public class Tester extends Activity {
String[] vals = { "here", "are", "some", "values" };
Spinner spinner;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner = (Spinner) findViewById(R.id.spin);
ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, vals);
spinner.setAdapter(ad);
Log.i("", "" + spinner.getChildCount());
Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
int a = spinner.getCount();
int b = spinner.getChildCount();
System.out.println("Count =" + a);
System.out.println("ChildCount =" + b);
for (int i = 0; i < b; i++) {
View v = spinner.getChildAt(i);
if (v == null) {
System.out.println("View not found");
} else {
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("","click");
}
});
}
}
}
}, 500);
}
}
Run Code Online (Sandbox Code Playgroud)
让我确切地知道您需要微调器的行为方式,我们可以制定出更好的解决方案。
| 归档时间: |
|
| 查看次数: |
102810 次 |
| 最近记录: |