Получение исключения нулевого указателя на выбранном элементе сетки после прокрутки

1

При щелчке после создания прокрутки (Вертикаль) я получаю исключение нулевого указателя вместо TextView. Для вашей справки я использую следующий код:

collection_image.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
    <GridView
    android:id="@+id/gridView"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:numColumns="3"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:columnWidth="120dp"
    android:gravity="center" />
</RelativeLayout>

adapter_griditem.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:gravity="center" >

   <TextView
       android:id="@+id/grid_item_text"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:gravity="center_horizontal"
       android:textColor="#FFFFFF" />

</LinearLayout>

Функция getView ImageAdapter, расширяющая класс BaseAdapter

public View getView(int position, View convertView, ViewGroup parent) {
    View MyView = convertView;
    try{
        Image cached = images[position];
        if(convertView == null) {
            MyView = LayoutInflater.from(mContext).inflate(R.layout.adapter_griditem, null);
        }
        title = (TextView)MyView.findViewById(R.id.grid_item_text);

        if(cached.thumb == null) {

            // no cached thumb, 

        } else {
            title.setTag(images[position].fullPath);
            title.setText(imageCollection[position]);
            title.setCompoundDrawablesWithIntrinsicBounds(null, new BitmapDrawable(cached.thumb), null, null);
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
    return MyView;
}

О деятельности (две функции):

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    return inflater.inflate(R.layout.collection_image, container, false);
}

@Override
public void onResume(){
    imageAdapter = new ImageAdapter(getActivity().getApplicationContext(), collectionCount, mTag, imageCollection, mType);

        View fragmentView = getView();    
        mGridView = (GridView) fragmentView.findViewById(R.id.gridView);
        mGridView.destroyDrawingCache();
        mGridView.setAdapter(imageAdapter);

        mGridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                TextView mtext = (TextView) parent.getChildAt(position).findViewById(R.id.grid_item_text); 
                if(mtext != null){
                    String imageURL = (String) mtext.getTag();
                    gridHandler(imageURL);
                }
            }
        });

}

Кто-нибудь пожалуйста?

Edit1:

Logcat ===

05-30 18:17:23.371: E/AndroidRuntime(512): FATAL EXCEPTION: main
05-30 18:17:23.371: E/AndroidRuntime(512): java.lang.NullPointerException
05-30 18:17:23.371: E/AndroidRuntime(512):  at com.tftus.greetz.fragments.DisplayCardsFragment$1.onItemClick(DisplayCardsFragment.java:71)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.widget.AdapterView.performItemClick(AdapterView.java:282)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.widget.AbsListView.performItemClick(AbsListView.java:1032)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2447)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.widget.AbsListView$1.run(AbsListView.java:3065)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.os.Handler.handleCallback(Handler.java:587)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.os.Looper.loop(Looper.java:126)
05-30 18:17:23.371: E/AndroidRuntime(512):  at android.app.ActivityThread.main(ActivityThread.java:3997)
05-30 18:17:23.371: E/AndroidRuntime(512):  at java.lang.reflect.Method.invokeNative(Native Method)
05-30 18:17:23.371: E/AndroidRuntime(512):  at java.lang.reflect.Method.invoke(Method.java:491)
05-30 18:17:23.371: E/AndroidRuntime(512):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-30 18:17:23.371: E/AndroidRuntime(512):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-30 18:17:23.371: E/AndroidRuntime(512):  at dalvik.system.NativeStart.main(Native Method)

код "DisplayCardsFragment.java:71"

TextView mtext = (TextView) parent.getChildAt (позиция).findViewById(R.id.grid_item_text);

  • 0
    поместите свой полный logcat и увидите, что нулевой указатель имеет строку №.
  • 0
    @SamirMangroliya Добавлено.
Теги:
android-gridview

4 ответа

1
Лучший ответ

я думаю, что его не получить refrences для xml файла, так что исключение из null-указателя

TextView mtext = (TextView)v.findViewById(R.id.grid_item_text); 
  • 0
    Мне нравится, когда объяснение фрагмента кода так впечатляет ...
  • 0
    @WarrenFaith что ты говоришь?
Показать ещё 2 комментария
1

вы заменяете

TextView mtext = (TextView)v.findViewById(R.id.grid_item_text); 

от

TextView mtext = (TextView)v;

и в файле adapter_griditem.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/grid_item_text"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:gravity="center_horizontal"
   android:textColor="#FFFFFF" />
1

OnItemClickListener себе обеспечивает itemview. Когда вы используете gridView.Child он будет возвращать только текущие элементы, но не все, поэтому вы получаете проблему.....

Использование:

v.findViewById(R.id.itemid); 
1

попробуйте заменить линию

 TextView mtext = (TextView) parent.getChildAt(position).findViewById(R.id.grid_item_text); 
           by 
 TextView mtext = (TextView) v.findViewById(R.id.grid_item_text); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню