2014-01-24 3 views
0

Существует немного шаблона, используемого при отображении ListView или GridView. Учитывая XML-файл и мой первый показанный метод, каким будет мой второй метод? Как это происходит, я получаю исключение, что RelativeLayout не может быть перенесено в ImageView на эту строку второго показанного метода: ImageView v = (ImageView) gridView.getChildAt(i); Я знаю, что мой gridView - это куча relativeLayouts, но не уверен, как получить доступ к их чертежам.Метод OnPause для GridView ListActivity - Android

Вот myLayout.XML:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <ImageView 
      android:id="@+id/icon" 
      android:layout_width="200dp" 
      android:layout_height="200dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:padding="8dp" 
      android:scaleType="fitCenter" /> 

    </RelativeLayout> 

ImageAdapter.getView()

public View getView(int position, View convertView, ViewGroup parent) { 
       ViewHolder holder; 
       ImageHelper ih = new ImageHelper(); 
       if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.mylayout, null); 

       holder = new ViewHolder(); 
       holder.icon = (ImageView) convertView.findViewById(R.id.icon); 

       convertView.setTag(holder); 
       } else { 
       holder = (ViewHolder) convertView.getTag(); 
       } 

       holder.icon.setImageBitmap(ih.decodeSampledBitmapFromImagePath(mList.get(position), 150, 150)); 

       return convertView; 
      } 

ViewGridView.OnPause()

@Override 
     protected void onPause() { 
      GridView gridView = (GridView) findViewById(R.id.gridviewViewOutfits); 
      int count = gridView.getCount(); 
      for (int i = 0; i < count; i++) { 
       ImageView v = (ImageView) gridView.getChildAt(i); 
       if (v != null) { 
        if (v.getDrawable() != null) v.getDrawable().setCallback(null); 
       } 
      } 
      super.onPause(); 
     } 

Благодаря

ответ

1

Попробуйте

ImageView v = (ImageView)((ViewGroup)gridView.getChildAt(i)).getChildAt(0); 
+0

Спасибо, я уверен, что это правильно, поскольку исключение ушло, но теперь я получаю исключение нулевого указателя в той же строке. Я закончил удаление onPause и OnDestroy из-за того, что код, устанавливающий обратный вызов на null, вызывал nullPointerexceptions – user3164083

+1

GridView содержит представления, отображаемые только на экране. Я думаю, что вы пытаетесь получить доступ к представлениям, которые не существуют. Http://developer.android.com/reference/android/view/ViewGroup.html#getChildAt(int) –