使用android时的classcastexpetion:layout_toStartOf

使用android时的classcastexpetion:layout_toStartOf,android,android-listview,android-imageview,textview,classcastexception,Android,Android Listview,Android Imageview,Textview,Classcastexception,我有一个ListView,在此之前我已经定位了两个视图:一个ImageView位于其父视图的左侧,然后我使用一个TextView定位在这个ImageView的右侧。 在xml中,我使用以下代码来实现这一点: android:layout\u toRightOf=“@+id/single”,其中single是一个ImageView 。。。所以没问题:-) 但今天我想到了一个新主意——我希望在这个列表视图中有另一个ImageView。我将这个新视图定位到其父视图(ListView)的右侧 andro

我有一个ListView,在此之前我已经定位了两个视图:一个ImageView位于其父视图的左侧,然后我使用一个TextView定位在这个ImageView的右侧。 在xml中,我使用以下代码来实现这一点:

android:layout\u toRightOf=“@+id/single”,其中single是一个ImageView

。。。所以没问题:-)

但今天我想到了一个新主意——我希望在这个列表视图中有另一个ImageView。我将这个新视图定位到其父视图(ListView)的右侧

android:layout\u alignParentRight=“true”

现在,当我这样做时,出现了一个小问题:在文本视图中有一个长句的情况下,它与这个新的图像视图重叠。但根据android文档,我发现了以下代码:

android:layout\u toStartOf=“@+id/volume”,其中volume是新ImageView的id

我真的认为它会起作用。“至末端”表示将此视图的末端边缘定位到 给定的锚定视图ID[参考]

所以我认为一切都会成功,但当我编译并开始测试应用程序时,我的应用程序在单击列表视图时崩溃。崩溃是由classcastexception引起的ImageView无法转换为文本视图

所以我的问题是为什么我会得到这个ClassCastException?我唯一要做的就是将TextView的结束边缘定位到ImageView的开始。当我使用toStartOf时,为什么会得到classcastException?当我使用xml代码android:layout_toRightOf=“@+id/single”将TextView定位到另一个ImageView的右侧时,我没有遇到异常情况

总之:我的目标是在这个ListView中有三个视图:两个ImageView——一个在左边,一个在右边。在这两个图像视图之间,我想放置TextView

我在getChildView方法中得到异常

<!-- Layout för undermenyerna -->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="5dp"
android:paddingLeft="0px"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="0px"
android:background="#ffffff"
tools:context=".PhraseActivity" >

 <!-- view för ena ena könet, man eller kvinna --> 
  <TextView
    android:id="@+id/label_single"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_toRightOf="@+id/single"
    android:layout_toStartOf="@+id/volume"
    android:la

    />

    <!-- texview för båda könen, man och kvinna -->
  <TextView
    android:id="@+id/label_couple"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:layout_toRightOf="@+id/couple"

    />

   <!-- texview för extra info -->
  <TextView
    android:id="@+id/extra_info"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/couple"
    android:layout_marginTop="10sp"

    android:background="@drawable/back_extrainfo"
    android:padding="5sp"
    android:visibility="gone"
    android:textColor="#8c8c8c"
    />

  <!-- text länk till bild, tex karta som visar vart staden är i Thailand -->
  <TextView
    android:id="@+id/imagelink"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:focusableInTouchMode="true"
    android:text="Click to view on map"
    android:textColor="#3241d3"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/couple"
      />

  <!-- text länk till bild, samma syfte som texviewen ovan -->
  <TextView
    android:id="@+id/imagelink2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:text="Click to view image"
    android:focusableInTouchMode="true"
    android:textColor="#3241d3"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/extra_info"
      />

 <!-- view för en bild av ena könet, man eller kvinna --> 
 <ImageView
    android:id="@+id/single"
    android:layout_width="68sp"
    android:layout_height="68sp"

    />


<!-- view för en bild av båda könen, man och kvinna -->
<ImageView 
   android:id="@+id/couple"
   android:layout_width="100sp"
   android:layout_height="68sp"
   />

<ImageView
    android:id="@+id/volume"
    android:layout_width="100sp"
    android:layout_height="79sp"
    android:layout_alignParentRight="true"
/>

</RelativeLayout> 




  public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
      final ViewHolder holder;

      if (convertView == null) {
          LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          convertView = inflater.inflate(R.layout.activity_subphrase, parent, false);
          holder = new ViewHolder();
          holder.text = (TextView) convertView.findViewById(R.id.label_single);
          holder.text2 = (TextView) convertView.findViewById(R.id.label_couple);
          holder.imageView = (ImageView) convertView.findViewById(R.id.single);
          holder.imageView2 = (ImageView) convertView.findViewById(R.id.couple);
          holder.volumeControl = (ImageView) convertView.findViewById(R.id.volume);
          convertView.setTag(holder);

      } else {  
          holder = (ViewHolder) convertView.getTag();
      }
      final int nChildren = getChildrenCount(groupPosition);


      final View v = convertView;
      switch (nChildren) {
        case 1:
            holder.imageView.setBackgroundResource(0);
            holder.imageView2.bringToFront();
            holder.imageView2.setVisibility(ImageView.VISIBLE);
            holder.text.setText(null);
            holder.text2.setText(contents[groupPosition][childPosition]);
            holder.imageView2.setBackgroundResource(R.drawable.man_woman_3);

            //extra(groupPosition, category, holder.text, convertView, parent);
            showThaiImages(groupPosition, holder.text, convertView, parent);
            // Väntar till all layout är avklarad - efter detta bearbetas animering. 

            vto = convertView.getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
            public void onGlobalLayout() {
                v.getViewTreeObserver().removeOnGlobalLayoutListener(this);  //vet inte om denna metod är nödvändig
                holder.imageView2.bringToFront();
                holder.imageView2.setBackgroundResource(R.drawable.animation3);
                frameAnimation = (AnimationDrawable) holder.imageView2.getBackground();
                frameAnimation.start();
            }}); 
            break;

        case 2:


            try {
                System.out.println("ViewTreeObserver is alive = : " + vto.isAlive());
            } catch (Exception e) {
                e.printStackTrace();
            }

            //v.getViewTreeObserver().removeOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener());   //vet inte om denna metod är nödvändig
            holder.imageView2.setVisibility(View.GONE);
            holder.imageView2.setBackgroundResource(0);
            holder.imageView.bringToFront();
            holder.text2.setText(null);
            //holder.imageView.invalidate();
            holder.text.setText(contents[groupPosition][childPosition]);
            switch (childPosition) { // Switch-villkor för man eller kvinna. 
                case 0: // Man.
                    holder.imageView.setBackgroundResource(R.drawable.man_3);
                    break;
                case 1: // Kvinna.
                    holder.imageView.setBackgroundResource(R.drawable.woman_3);
                    break;
            }
            break;
      }

      holder.volumeControl.setBackgroundResource(R.drawable.speaker);
      notifyDataSetChanged();
      return convertView;
  }

公共视图getChildView(int-groupPosition、int-childPosition、布尔isLastChild、视图convertView、视图组父级){
最终持票人;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.activity_子短语,父级,false);
holder=新的ViewHolder();
holder.text=(TextView)convertView.findViewById(R.id.label\u single);
holder.text2=(TextView)convertView.findViewById(R.id.label\u耦合);
holder.imageView=(imageView)convertView.findViewById(R.id.single);
holder.ImageView 2=(ImageView)convertView.findViewById(R.id.couple);
holder.volumeControl=(ImageView)convertView.findViewById(R.id.volume);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
final int-nChildren=getChildrenCount(groupPosition);
最终视图v=转换视图;
开关(儿童){
案例1:
holder.imageView.setBackgroundResource(0);
holder.imageView2.bringToFront();
holder.imageView2.setVisibility(ImageView.VISIBLE);
holder.text.setText(null);
holder.text2.setText(内容[groupPosition][childPosition]);
holder.imageView2.setBackgroundResource(R.drawable.man\u Women\u 3);
//额外(groupPosition、category、holder.text、convertView、parent);
显示图像(groupPosition、holder.text、convertView、父级);
//Väntar直到所有的布局都是avklarad-efter detta bearbetas animering。
vto=convertView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(新的OnGlobalLayoutListener(){
公共图书馆{
v、 getViewTreeObserver()
holder.imageView2.bringToFront();
holder.imageView2.setBackgroundResource(R.drawable.animation3);
frameAnimation=(AnimationDrawable)holder.imageView2.getBackground();
frameAnimation.start();
}}); 
打破
案例2:
试一试{
System.out.println(“ViewTreeObserver处于活动状态=:”+vto.isAlive());
}捕获(例外e){
e、 printStackTrace();
}
//v、 getViewTreeObserver().RemoveOnGlobalYoutListener(新ViewTreeObserver.OnGlobalYoutListener());//检查denna metodär nödvändig的内部
holder.imageView2.setVisibility(View.GONE);
holder.imageView2.setBackgroundResource(0);
holder.imageView.bringToFront();
holder.text2.setText(空);
//holder.imageView.invalidate();
holder.text.setText(内容[groupPosition][childPosition]);
开关(儿童位置){//willkor för man eller kvinna开关。
案例0://男子。
支架.图像视图.立根资源(R.可绘制.曼努3);
打破
案例1://Kvinna。
持有者.图像视图.背景资源(R.drawable.woman_3);
打破
}
打破
}
支架.音量控制.设置背景资源(R.可拖动.扬声器);
notifyDataSetChanged();
返回视图;
}

删除gen文件夹并清理项目,然后重试。更改视图位置时会出现此错误


试试这一次。

我复制了一份项目,然后就成功了。异常消失,但toStartOf代码不起作用。相反,我用托莱夫托夫。