Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用两个文本视图和一个切换按钮创建Listview?_Android_Listview_Textview_Togglebutton - Fatal编程技术网

Android 如何使用两个文本视图和一个切换按钮创建Listview?

Android 如何使用两个文本视图和一个切换按钮创建Listview?,android,listview,textview,togglebutton,Android,Listview,Textview,Togglebutton,我创建了一个列表视图,其中有两个文本视图作为姓名和电话号码,在这个切换按钮的前面。当我点击切换按钮时,我应该得到这个名字。但它给出了错误的定义 '02-17 06:49:53.170:E/AndroidRuntime(1425):java.lang.ClassCastException:android.widget.TextView无法强制转换为android.widget.ToggleButton 02-17 06:49:53.170:E/AndroidRuntime(1425):在com.e

我创建了一个列表视图,其中有两个文本视图作为姓名和电话号码,在这个切换按钮的前面。当我点击切换按钮时,我应该得到这个名字。但它给出了错误的定义

'02-17 06:49:53.170:E/AndroidRuntime(1425):java.lang.ClassCastException:android.widget.TextView无法强制转换为android.widget.ToggleButton 02-17 06:49:53.170:E/AndroidRuntime(1425):在com.example.comparararray.MainActivity$1.onItemClick(MainActivity.java:85) 02-17 06:49:53.170:E/AndroidRuntime(1425):在android.widget.AdapterView.performItemClick(AdapterView.java:299) 02-17 06:49:53.170:E/AndroidRuntime(1425):在android.widget.AbsListView.performItemClick(AbsListView.java:1113) 02-17 06:49:53.170:E/AndroidRuntime(1425):在android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 02-17 06:49:53.170:E/AndroidRuntime(1425):在android.widget.AbsListView$3.run(AbsListView.java:3638) 02-17 06:49:53.170:E/AndroidRuntime(1425):在android.os.Handler.handleCallback(Handler.java:733)上 02-17 06:49:53.170:E/AndroidRuntime(1425):在android.os.Handler.dispatchMessage(Handler.java:95)上 02-17 06:49:53.170:E/AndroidRuntime(1425):在android.os.Looper.loop(Looper.java:136)上 02-17 06:49:53.170:E/AndroidRuntime(1425):位于android.app.ActivityThread.main(ActivityThread.java:5017) 02-17 06:49:53.170:E/AndroidRuntime(1425):位于java.lang.reflect.Method.Invokenactive(本机方法) 02-17 06:49:53.170:E/AndroidRuntime(1425):位于java.lang.reflect.Method.invoke(Method.java:515) 02-17 06:49:53.170:E/AndroidRuntime(1425):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 02-17 06:49:53.170:E/AndroidRuntime(1425):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 02-17 06:49:53.170:E/AndroidRuntime(1425):在dalvik.system.NativeStart.main(本机方法)

下面是我的代码

 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=(ListView)findViewById(R.id.lv_国家);
OnItemClickListener项ClickListener=新建OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView lv、视图项、内部位置、长id){
ListView lView=(ListView)lv;
SimpleAdapter=(SimpleAdapter)lView.getAdapter();
HashMap hm=(HashMap)adapter.getItem(位置);
/**ListView中单击的项目*/
RelativeLayout rLayout=(RelativeLayout)项;
/**获取与单击的项目对应的切换按钮*/
ToggleButton tgl=(ToggleButton)rLayout.getChildAt(1);
字符串strStatus=“”;
if(tgl.isChecked()){
tgl.setChecked(假);
strStatus=“关”;
状态[位置]=错误;
}否则{
tgl.setChecked(真);
strStatus=“On”;
状态[位置]=真;
}
Toast.makeText(getBaseContext(),(String)hm.get(“txt”)+:“+strStatus,Toast.LENGTH_SHORT).show();
}
})

lvCountries.setOnItemClickListener(itemClickListener)


请帮帮我,我被困在这里了

这清楚地表明您正试图在切换按钮中转换textview,因此请首先检查版面中的切换位置。这里索引1上有textview
rLayout.getChildAt(1)

使用
instanceof
检查is视图是否为
ToggleButton
TextView
而不是使用静态索引从所选行布局获取
ToggleButton

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;
     }
}
RelativeLayout rLayout=(RelativeLayout)arg1;
对于(int index=0;index
错误显示“TextView无法转换为android.widget.ToggleButton”,因此,“rLayout.getChildAt(1)”方法显然不适合您。 您可以在XML中设置id,然后从“rLayout”中找到它

ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);

注意:如果不起作用,请清理项目并重试。


希望这对您有所帮助。

您正在将文本视图转换为切换按钮。问题出在这一行:

ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);
出于某种原因,1处的子项是文本视图,而不是预期的ToggleButton


我建议您使用
findViewById
而不是
getChildAt
,这样您就可以通过id而不是布局中的位置来查找它们。它将避免这些与小部件顺序相关的bug。

您确定
rLayout.getChildAt(1)为您获取
ToogleButton
?它可能是
rLayout.getChildAt(2)…如何从rLayout中找到id?rLayout.findViewById(R.id.your_id)Thanx各位,我的切换按钮位于位置0。
ToggleButton tgl = (ToggleButton) rLayout.getChildAt(1);