【问题标题】:How to create Listview with two textview and one toggle Button?如何使用两个文本视图和一个切换按钮创建 Listview?
【发布时间】:2015-04-19 10:28:29
【问题描述】:

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

'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): at com.example.comparearray.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.invokeNative(Native Method) 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): 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);

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

【问题讨论】:

  • 您确定rLayout.getChildAt(1); 为您提供ToogleButton 吗?应该是rLayout.getChildAt(2);...

标签: android listview textview togglebutton


【解决方案1】:

更改以下行

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

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

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

希望对你有帮助。

【讨论】:

  • 谢谢大家,我的切换按钮在位置 0。
【解决方案2】:

它清楚地表明您正在尝试在切换按钮中投射 textview,因此请先检查布局中的切换位置。这里的索引 1 上有 textview rLayout.getChildAt(1);

【讨论】:

    【解决方案3】:

    不要使用静态索引从选定的行布局中获取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;
         }
    }
    

    【讨论】:

      【解决方案4】:

      错误提示“TextView 无法转换为 android.widget.ToggleButton”,因此“rLayout.getChildAt(1)”方法显然不适合您。 您可以在 XML 中设置 id,然后从您的“rLayout”中找到它。

      【讨论】:

      • 如何从 rLayout 中找到 id?
      • rLayout.findViewById(R.id.your_id)
      【解决方案5】:

      您正在将 TextView 转换为 ToggleButton。问题出在这一行:

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

      由于某种原因,1 处的孩子是 TextView 而不是预期的 ToggleButton。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        • 2010-09-23
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多