2015-09-21 4 views
0

У меня есть фрагмент внутри класса, потому что он является частью ViewPager. Однако в моем внешнем классе я реализую и OnItemClickListener из библиотеки третья часть для NavigationDrawer. Но внутри моего внутреннего класса у меня есть OnItemClickListener, который является интерфейсом Android SDK. Но это дает мне ошибку из-за сбоя в реализации метода onItemClick, который я действительно реализовал.Фрагмент не абстрактный и не переопределяет абстрактный метод

реализация Внутренний класс:

public static class AllFragment extends Fragment implements AdapterView.OnItemClickListener 

реализация метода onItemClick:

 gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View v, 
        int position, long arg3) { 
       String selectedItem; 
       if (position % 2 == 0) 
        selectedItem = "Facebook"; 
       else 
        selectedItem = "Twitter"; 
       Toast.makeText(getActivity(), 
         "Selected Item: " /*+ GridViewCustomAdapter.titles.get(position)*/, 
         Toast.LENGTH_SHORT).show(); 
       Intent showItem = new Intent(getActivity(), ShowAdvert.class); 
       showItem.putExtra("objectId", objectIdList.get(position)); 
       startActivity(showItem); 

      } 
     }); 

Ошибка:

Error:(327, 16) error: AllFragment is not abstract and does not override abstract method onItemClick(AdapterView<?>,View,int,long) in OnItemClickListener 

Если я не пишу new AdapterView.OnItemClickListener() а просто написать new OnItemClickListener() вместо , он вызовет OnItemClickListener из внешнего класса, который я ' m не интересует. Btw начало внешнего класса выглядит так:

Зачем мне эта ошибка?

+1

Там нет никакой связи между 'onItemClick' методом в этом анонимном классе и' AllFragment'. Вам нужно реализовать метод в «AllFragment» или удалить «инструменты» из этого класса. –

ответ

1

Вы получаете сообщение об ошибке, потому что ваш класс фрагментов реализует Listener, но у вас не было метода, который его реализует.

Вы должны переопределить метод как метод в своем классе фрагмента или просто удалить инструменты для вашего класса фрагмента, поскольку вы уже переопределяете метод в своем анонимном классе.

public static class AllFragment extends Fragment implements AdapterView.OnItemClickListener { 

    // constructor and methods 
    // ... 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View v, 
       int position, long arg3) { 
     // your implementation 
    } 
} 

А затем присвоить прослушиватель к GridView

gridView.setOnClickListener(this) 
Смежные вопросы