0

У меня есть фрагмент с именем HomeFragment.java и он расширяет класс фрагмента.Как добавить панель инструментов к фрагменту в android?

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.example.android.test.R; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.widget.Toolbar; 

public class HomeFragment extends Fragment { 

    private Toolbar toolbar; 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_profile,container,false); 
     toolbar = (Toolbar) view.findViewById(R.id.toolbar); 
     getActivity().setSupportActionController(toolbar); 
     //setSupportActionBar(toolbar); 
     return view; 
    } 
} 

Но я получаю сообщение об ошибке в строке:

getActivity().setSupportActionController(toolbar) 

И ошибка:

Cannot resolve method 'setSupportActionController(android.support.v7.widget.Toolbar)' 

И есть условие, что я не могу выразить свою HomeFragment до AppCombatActivity. Он должен быть оставлен как Фрагмент, т. Е. Публичный класс HomeFragment extends Фрагмент.

условие из-за линии номер 5 в этом фрагменте кода

Runnable mPendingRunnable = new Runnable() { 
     @Override 
     public void run() { 
      // update the main content by replacing fragments 
      Fragment fragment = getHomeFragment(); 
      FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
      fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, 
        android.R.anim.fade_out); 
      fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG); 
      fragmentTransaction.commitAllowingStateLoss(); 
     } 
    }; 

    // If mPendingRunnable is not null, then add to the message queue 
    if (mPendingRunnable != null) { 
     mHandler.post(mPendingRunnable); 
    } 

    // show or hide the fab button 
    toggleFab(); 

    //Closing drawer on item click 
    drawer.closeDrawers(); 

    // refresh toolbar menu 
    invalidateOptionsMenu(); 
} 

И мой getHomeFragment() является:

private Fragment getHomeFragment() { 
    switch (navItemIndex) { 
     case 0: 
      // home 
      HomeFragment homeFragment = new HomeFragment(); 
      return homeFragment; 
     case 1: 
      // photos 
      PhotosFragment photosFragment = new PhotosFragment(); 
      return photosFragment; 
     case 2: 
      // movies fragment 
      MoviesFragment moviesFragment = new MoviesFragment(); 
      return moviesFragment; 
     case 3: 
      // notifications fragment 
      NotificationsFragment notificationsFragment = new NotificationsFragment(); 
      return notificationsFragment; 

     case 4: 
      // settings fragment 
      SettingsFragment settingsFragment = new SettingsFragment(); 
      return settingsFragment; 
     default: 
      return new HomeFragment(); 
    } 
} 

Так что, если я меняю общественного класса HomeFragment расширяет фрагмент до Открытый класс HomeFragment расширяет AppCombatActivity, оператор возврата в приведенном выше коде даст несовместимый тип ошибки.

Пожалуйста, помогите мне в разрешении этой ошибки, я не могу создать панель инструментов или панель действий из-за этой ошибки. Любая помощь будет заметна. Thankyou!

+1

Почему вы делаете «HomeFragment extends AppCompatActivity», если это не активность? Вам нужно бросить 'getActivity', предположительно –

ответ

2

Перенесите свою активность из getActivity() в AppCompatActivity. Я думаю, что это будет решить вашу ошибку:

((AppCompatActivity) getActivity()).getSupportActionBar(toolbar); 

Или в вашем случае

((AppCompatActivity) getActivity()).setSupportActionController(toolbar); 

getActivity() возвращает FragmentActivity и вам нужно получить AppCompatActivity вернулся. Надеюсь это поможет!

+0

Большое спасибо! Это сработало! :-) – neerav94

Смежные вопросы