classcastexpetion при использовании android:layout_toStartOf

У меня есть ListView, в котором я до сегодняшнего дня размещал два представления: одно ImageView слева от его родителя, а затем я использую TextView, расположенное справа от этого ImageView. В xml я использую для этого следующий код:

android:layout_toRightOf="@+id/single" , где single — это ImageView.

... так что никаких проблем :-)

Но сегодня мне пришла в голову новая идея - я хочу еще один ImageView в этом ListView. Я расположил это новое представление справа от его родителя (ListView).

Android:layout_alignParentRight="true"

Когда я сделал это, возникла небольшая проблема: в случаях, когда у меня есть длинное предложение в TextView, оно перекрывает этот новый ImageView. Но в соответствии с документацией по Android я нашел этот код:

android:layout_toStartOf="@+id/volume" , где Volume — это идентификатор нового ImageView.

Я действительно думал, что это сработает. в конец средства Помещает конечный край этого представления в начало заданного идентификатора представления привязки. [ссылка]

Поэтому я думал, что все будет работать, но когда я скомпилировал и начал тестировать приложение, мое приложение вылетает, когда я нажимаю на список. Сбой происходит из-за classcastException. ImageView нельзя преобразовать в TextView

Итак, мой вопрос: почему я получаю это ClassCastException? Единственное, что я делаю, это помещаю край TextView в начало ImageView. Почему я получаю classcastException при использовании toStartOf? Я не получаю исключения, когда помещаю TextView справа от другого ImageView с помощью xml-кода android:layout_toRightOf="@+id/single"

Подводя итог: моя цель - иметь три представления в этом ListView: два ImageView - одно слева и одно справа. И между этими двумя ImageViews я хочу разместить 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;
  }

person Björn Hallström    schedule 28.08.2013    source источник


Ответы (1)


Удалите папку gen, очистите проект и повторите попытку. Эта ошибка возникает при изменении положения видов.

Попробуйте это один раз.

person sanky jain    schedule 28.08.2013
comment
Я сделал копию проекта, и все заработало. Исключение исчезло, но код toStartOf не работал. Вместо этого я использовал toLeftOf. - person Björn Hallström; 28.08.2013