如何用两个textview和一个toggle Button创建Listview?
How to create Listview with two textview and one toggle Button?
我创建了带有两个文本视图作为名称的列表视图,phone 没有。和这个切换按钮的前面。当我点击切换按钮时,我应该得到名字。但它给出了错误
'02-17 06:49:53.170: E/AndroidRuntime(1425): java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.ToggleButton
02-17 06:49:53.170: E/AndroidRuntime(1425): at com.example.comparearray.MainActivity.onItemClick(MainActivity.java:85)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AdapterView.performItemClick(AdapterView.java:299)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AbsListView.run(AbsListView.java:3638)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.os.Handler.handleCallback(Handler.java:733)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.os.Handler.dispatchMessage(Handler.java:95)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.os.Looper.loop(Looper.java:136)
02-17 06:49:53.170: E/AndroidRuntime(1425): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-17 06:49:53.170: E/AndroidRuntime(1425): at java.lang.reflect.Method.invokeNative(Native Method)
02-17 06:49:53.170: E/AndroidRuntime(1425): at java.lang.reflect.Method.invoke(Method.java:515)
02-17 06:49:53.170: E/AndroidRuntime(1425): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-17 06:49:53.170: E/AndroidRuntime(1425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-17 06:49:53.170: E/AndroidRuntime(1425): at dalvik.system.NativeStart.main(Native Method)
下面是我的代码
lvCountries = (ListView) findViewById(R.id.lv_countries);
OnItemClickListener itemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> lv, View item, int position, long id) {
ListView lView = (ListView) lv;
SimpleAdapter adapter = (SimpleAdapter) lView.getAdapter();
HashMap<String,Object> hm = (HashMap) adapter.getItem(position);
/** The clicked Item in the ListView */
RelativeLayout rLayout = (RelativeLayout) item;
/** Getting the toggle button corresponding to the clicked item */
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);
String strStatus = "";
if(tgl.isChecked()){
tgl.setChecked(false);
strStatus = "Off";
status[position]=false;
}else{
tgl.setChecked(true);
strStatus = "On";
status[position]=true;
}
Toast.makeText(getBaseContext(), (String) hm.get("txt") + " : " + strStatus, Toast.LENGTH_SHORT).show();
}
};
lvCountries.setOnItemClickListener(itemClickListener);
请帮助我,我被困在这里了。
它清楚地表明您正在尝试在切换按钮中投射 textview,因此请首先检查布局中的切换位置。这里的索引 1 上有 textview rLayout.getChildAt(1);
.
不使用静态索引从选定的行布局中获取 ToggleButton
,而是使用 instanceof
检查视图是 ToggleButton
还是 TextView
:
RelativeLayout rLayout = (RelativeLayout) arg1;
for (int index = 0; index < rLayout.getChildCount(); index++) {
View view=rLayout.getChildAt(index);
if(view instanceof ToggleButton){
ToggleButton tgl = (ToggleButton)view;
//... do task here...
break;
}
}
错误显示 "TextView cannot be cast to android.widget.ToggleButton",因此,方法“rLayout.getChildAt(1)”显然不适合您。
你可以在 XML 中设置 id,然后从你的 "rLayout".
中找到它
更改以下行
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);
至
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(2);
注意:如果不起作用,请清理您的项目并重试。
希望对您有所帮助。
您正在将 TextView 转换为 ToggleButton。问题出在这一行:
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);
出于某种原因,1 处的子项是 TextView 而不是预期的 ToggleButton。
我鼓励您使用 findViewById
而不是 getChildAt
,这样您可以通过 ID 而不是在布局中的位置找到它们。它将避免这些与小部件顺序相关的错误。
我创建了带有两个文本视图作为名称的列表视图,phone 没有。和这个切换按钮的前面。当我点击切换按钮时,我应该得到名字。但它给出了错误
'02-17 06:49:53.170: E/AndroidRuntime(1425): java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.ToggleButton 02-17 06:49:53.170: E/AndroidRuntime(1425): at com.example.comparearray.MainActivity.onItemClick(MainActivity.java:85) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AdapterView.performItemClick(AdapterView.java:299) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.widget.AbsListView.run(AbsListView.java:3638) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.os.Handler.handleCallback(Handler.java:733) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.os.Handler.dispatchMessage(Handler.java:95) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.os.Looper.loop(Looper.java:136) 02-17 06:49:53.170: E/AndroidRuntime(1425): at android.app.ActivityThread.main(ActivityThread.java:5017) 02-17 06:49:53.170: E/AndroidRuntime(1425): at java.lang.reflect.Method.invokeNative(Native Method) 02-17 06:49:53.170: E/AndroidRuntime(1425): at java.lang.reflect.Method.invoke(Method.java:515) 02-17 06:49:53.170: E/AndroidRuntime(1425): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 02-17 06:49:53.170: E/AndroidRuntime(1425): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 02-17 06:49:53.170: E/AndroidRuntime(1425): at dalvik.system.NativeStart.main(Native Method)
下面是我的代码
lvCountries = (ListView) findViewById(R.id.lv_countries);
OnItemClickListener itemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> lv, View item, int position, long id) {
ListView lView = (ListView) lv;
SimpleAdapter adapter = (SimpleAdapter) lView.getAdapter();
HashMap<String,Object> hm = (HashMap) adapter.getItem(position);
/** The clicked Item in the ListView */
RelativeLayout rLayout = (RelativeLayout) item;
/** Getting the toggle button corresponding to the clicked item */
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);
String strStatus = "";
if(tgl.isChecked()){
tgl.setChecked(false);
strStatus = "Off";
status[position]=false;
}else{
tgl.setChecked(true);
strStatus = "On";
status[position]=true;
}
Toast.makeText(getBaseContext(), (String) hm.get("txt") + " : " + strStatus, Toast.LENGTH_SHORT).show();
}
};
lvCountries.setOnItemClickListener(itemClickListener);
请帮助我,我被困在这里了。
它清楚地表明您正在尝试在切换按钮中投射 textview,因此请首先检查布局中的切换位置。这里的索引 1 上有 textview rLayout.getChildAt(1);
.
不使用静态索引从选定的行布局中获取 ToggleButton
,而是使用 instanceof
检查视图是 ToggleButton
还是 TextView
:
RelativeLayout rLayout = (RelativeLayout) arg1;
for (int index = 0; index < rLayout.getChildCount(); index++) {
View view=rLayout.getChildAt(index);
if(view instanceof ToggleButton){
ToggleButton tgl = (ToggleButton)view;
//... do task here...
break;
}
}
错误显示 "TextView cannot be cast to android.widget.ToggleButton",因此,方法“rLayout.getChildAt(1)”显然不适合您。 你可以在 XML 中设置 id,然后从你的 "rLayout".
中找到它更改以下行
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);
至
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(2);
注意:如果不起作用,请清理您的项目并重试。
希望对您有所帮助。
您正在将 TextView 转换为 ToggleButton。问题出在这一行:
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);
出于某种原因,1 处的子项是 TextView 而不是预期的 ToggleButton。
我鼓励您使用 findViewById
而不是 getChildAt
,这样您可以通过 ID 而不是在布局中的位置找到它们。它将避免这些与小部件顺序相关的错误。