【问题标题】:Unable to start activity:UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView无法启动活动:UnsupportedOperationException:AdapterView 中不支持 addView(View, LayoutParams)
【发布时间】:2013-02-20 11:05:53
【问题描述】:

我想用基本格式写一个ListView,但我得到一个错误:

UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

和:

androidview.LayoutInfalater.inflate(LayoutInflater.java: some numbers....like 720,658...so on)

我知道应该在适配器类中做一些事情:

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    RelativeLayout rv = new RelativeLayout(c);

    TextView tv = new TextView(c);
    TextView tv1 = new TextView(c);
    ImageView imgv = new ImageView(c);

    tv.setText(s[position]);
    tv1.setText(i[position]);
    imgv.setImageResource(d[position]);

    rv.addView(tv);
    rv.addView(tv1);
    rv.addView(imgv);
    return rv;

}

我应该怎么做才能解决问题

LOGCAT:

02-20 16:40:24.967: E/Trace(1715): error opening trace file: No such file or directory (2)
02-20 16:40:25.819: W/ResourceType(1715): No package identifier when getting value for resource number 0x000020d0
02-20 16:40:25.819: D/AndroidRuntime(1715): Shutting down VM
02-20 16:40:25.819: W/dalvikvm(1715): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
02-20 16:40:25.857: E/AndroidRuntime(1715): FATAL EXCEPTION: main
02-20 16:40:25.857: E/AndroidRuntime(1715): android.content.res.Resources$NotFoundException: String resource ID #0x20d0
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.content.res.Resources.getText(Resources.java:229)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.TextView.setText(TextView.java:3620)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at com.example.systemzap2.adapt.getView(adapt.java:59)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.AbsListView.obtainView(AbsListView.java:2271)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.ListView.onMeasure(ListView.java:1156)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.View.measure(View.java:15172)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.View.measure(View.java:15172)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.View.measure(View.java:15172)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.View.measure(View.java:15172)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.View.measure(View.java:15172)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.Choreographer.doFrame(Choreographer.java:525)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.os.Handler.handleCallback(Handler.java:615)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.os.Looper.loop(Looper.java:137)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at java.lang.reflect.Method.invokeNative(Native Method)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at java.lang.reflect.Method.invoke(Method.java:511)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-20 16:40:25.857: E/AndroidRuntime(1715):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 似乎您没有向我们展示您的代码的重要部分。不支持在 AdapterView 上添加视图,因为 AdapterView 是 ListView、Gallery 等的抽象基础。请参阅:link。也许你应该只使用 ListView?
  • 你能发布你的这个适配器类的完整代码吗?
  • 发布你的完整日志
  • java或适配器类代码或2个布局的代码哪一个???

标签: android android-listview android-adapterview


【解决方案1】:

我该怎么办???

更正您的代码。

UnsupportedOperationException: addView(View, LayoutParams) 不是 在 AdapterView 中支持

AdapterView 的子类,例如 ListView不能在布局文件中手动添加子类或在代码中添加子类。因此,如果您在其中一种布局中有此功能:

<ListView // .. other attributes>
     <// other views <-- notice the children of the ListView tag
</ListView>

不要这样做,因为这会调用ListViewaddView方法,抛出异常。而是使用:

<ListView // .. other attributes />
< // other views

您也不能在如下代码中使用ListView 的任何addView 方法:

listViewReference.addView(anotherView); // <-- don't do it

另外,如果您在Activity 或适配器(其getView 方法)的代码中使用LayoutInflater.inflate 方法,不要传递 ListView 作为第二个范围。例如,不要使用

convertView  = inflator.inflate(R.layout.child_rows, parent);

在 Tamilarasi Sivaraj 的回答中,这将再次引发异常。而是使用:

convertView  = inflator.inflate(R.layout.child_rows, parent, false);

与您在问题中发布的异常相关,您似乎使用setText 方法和intsi 数组之一是int 数组)。问题是在这种情况下TextView 会认为您正在尝试使用像R.string.astring 这样的字符串资源来设置文本。您传递的 int 不是字符串资源,因此将引发异常。如果 siint 并且您尝试在 TextView 中显示它,请改用:

tv.setText(String.valueOf(s[position])); // assuming s is the int array

【讨论】:

  • +1 表示“另外,如果你在 Activity 或适配器的代码中使用 LayoutInflater.inflate 方法(它的 getView 方法),不要将 ListView 作为第二个参数传递”
  • 看起来这也适用于 GridView。 :(
  • 没有直接回答问题的部分,解决了我的问题! (通货膨胀)
  • 如果 addView() 在代码中不起作用,那么正确的方法是什么?
  • 感谢您:convertView = inflator.inflate(R.layout.child_rows, parent, false);
【解决方案2】:

替换inflater中的布局

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) LayoutInflater
                .from(contex);
        convertView = inflater.inflate(R.layout.your_layout, parent, false);

    }

    txtName = (TextView) convertView.findViewById(R.id.txtName);
    txtName.setText(""+ContactsArr.get(position).get("ContName"));
    txtPhoneNumber = (TextView) convertView.findViewById(R.id.txtContact);
    txtPhoneNumber.setText(""+ContactsArr.get(position).get("ContPhone"));

    return convertView;
}

【讨论】:

    【解决方案3】:

    如果您像我一样完全跳过@Luksprog 的答案中我需要的答案,因为它被埋在其中,请尝试使用将第三个参数添加到inflate 方法,也提到here

    inflater.inflate(R.layout.group_row, parent, false);
    

    不要使用true 而不是false,否则你会得到同样的错误,因为它试图将它附加/添加到父级,因此出现addView is not supported in AdapterView 错误。

    【讨论】:

      【解决方案4】:

      这样试试:

      public static class ViewHolder {
          public ImageView imageView;
          public TextView textView; 
      
          public View getView(int position, View convertView, ViewGroup parent) {
              try{
                  ViewHolder holder;
      
                  if (convertView == null)  {
                      holder = new ViewHolder(); 
                      LayoutInflater inflater = context1.getLayoutInflater();
                      convertView = inflater.inflate(R.layout.your_layout, null,true);  
      
                      holder.imageView = (ImageView) convertView.findViewById(R.id.imgview);
      
                      holder.textView = (TextView) convertView.findViewById(R.id.txtview);
      
                      convertView.setTag(holder);  
                  } else {
                      holder = (ViewHolder) convertView.getTag();  
                  }
      
                  holder.textView.setText("your text");
                  holder.imageView.setImageResource("your image resource");
              } catch (Exception e) {
                  System.out.println("Error: "+e);    
              }
      
              return convertView;
          }
      }
      

      【讨论】:

      • Tamilarasi Sivaraj,我应该把我的 tex t 视图和 img 视图放在子视图的位置吗???
      • 是的,您将 textview 和 image view 放在子视图中,并在 LayoutInflater 中提及布局名称...如果您有任何疑问,请咨询我
      • 我已经编辑了我的代码,以便使用适配器将 textview 和 imageview 从布局到 listview 使用它...
      【解决方案5】:

      我也收到了这个问题:

      android.view.InflateException:二进制 XML 文件第 2 行:addView(View, AdapterView 不支持 LayoutParams) 原因: java.lang.UnsupportedOperationException: addView(View, LayoutParams) AdapterView 不支持

      我在给.xml 充气时忘记添加"false"。添加后它可以工作。我的代码短语如下。我为我的.xml 使用了LinearLayout

      if(convertView == null){
              convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_format,parent,false);
          }
      

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多