2017-08-25 133 views
0

我正在開發一個android應用程序,我想在片段內使用工具欄和導航抽屜。我創建了一個名爲的內部類,支持類,然後使用方法setUptoolbaronCreateView方法但我得到了一個異常錯誤。 你認爲我應該怎麼做?預先感謝您,併爲我英文破碎而感到遺憾。 :)在片段中使用導航抽屜和工具欄

片段代碼:

public class FragmentVRList extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_main,container,false); 
    View cardView = inflater.inflate(R.layout.card_vr,container,false); 
    Generator generator = new Generator(); 

    RecyclerView recyclerView = (RecyclerView)rootView.findViewById(R.id.recycle); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    AdapterVRList adapter = new AdapterVRList(getActivity(), Generator.getData()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setNestedScrollingEnabled(false); 

    SupportClass supportClass = new SupportClass(); 
    supportClass.setUptoolbar(getActivity(),rootView); 

    final TeacherNet teacher = new TeacherNet(getActivity()); 
    int Length = Generator.getData().size(); 

    final JSONObject object = new JSONObject(); 
    for (int position = 1;position<Length;position++){ 
     switch (position){ 
      case 1: 
       cardView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

         try { 
          object.put("vrcode","1"); 
          teacher.SelectContent(object); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }); 
      case 2: 
       cardView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         try { 
          object.put("vrcode","2"); 
          teacher.SelectContent(object); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
      case 3: 
       cardView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         try { 
          object.put("vrcode","3"); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
     } 
    } 

    return rootView; 
} 

private class SupportClass extends AppCompatActivity{ 
    public void setUptoolbar(Activity activity, View view){ 
     Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     DrawerLayout drawerLayout = (DrawerLayout) view.findViewById(R.id.drawer); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(activity,drawerLayout,toolbar,0,0); 
     toggle.syncState(); 
     drawerLayout.addDrawerListener(toggle); 
    } 

} 

} 

這是錯誤: 顯示java.lang.NullPointerException:嘗試調用虛擬方法「android.view.Window $回調android.view.Window.getCallback( )'空對象引用

+0

片段內的活動! OMG –

+0

@BirendraSingh你是什麼意思?它不是一個Activity,它只是一個類,它只是爲了使用setSupportActionBar方法而擴展AppCompatAcivity。 –

回答

0

您正在使用錯誤的層次結構。正確的方法是:

Activity -> contains your toolbar, drawer and fragment holder (e.g. frame layout or viewpager)

現在,如果你想從片段中一些行動,你必須在將活動實施片段添加抽象事件偵聽器打開抽屜。

看到更多的在github這個快速鏈接:http://guides.codepath.com/android/fragment-navigation-drawer

+0

我以直接的方式回答了這個問題。 –

1

您是一路錯了你的方法。你可以做到這一點,而不需要定義一個擴展活動的新類。您始終通過getActivity()參考相關活動。即使您想保留參考,只需使用MainActivity a = (MainActivity) getActivity()即可將您的片段附加到MainActivity。然後在a上運行。您正在使用此錯誤,因爲您正在使用

SupportClass supportClass = new SupportClass(); 

活動使用Context.startActivity(Intent intent)開始。看起來你並不打算開始新的活動。你只是想改變基礎活動的屬性。所以正如我上面所說的,使用 MainActivity a = (MainActivity) getActivity()並與a一起玩a.setSupportActionBar()