2015-11-15 99 views
0

我試圖在操作欄的右上方添加一個按鈕圖標的右上方添加圖標,我按照這個tutorial無法在操作欄中

Claims1.java

public class Claims1 extends Fragment { 
    long fk; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Bundle bundle = this.getArguments(); 
     fk = bundle.getLong("ab"); 
     View claims = inflater.inflate(R.layout.claims, container, false); 

     ActionBar actionBar = getActivity().getActionBar(); 
     actionBar.setDisplayOptions(actionBar.getDisplayOptions() 
       | ActionBar.DISPLAY_SHOW_CUSTOM); 
     ImageView imageView = new ImageView(actionBar.getThemedContext()); 
     imageView.setScaleType(ImageView.ScaleType.CENTER); 
     imageView.setImageResource(R.mipmap.create); 
     ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
       ActionBar.LayoutParams.WRAP_CONTENT, 
       ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT 
       | Gravity.CENTER_VERTICAL); 
     layoutParams.rightMargin = 40; 
     imageView.setLayoutParams(layoutParams); 
     actionBar.setCustomView(imageView); 
     return claims; 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private String[] mNavigationDrawerItemTitles; 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private CharSequence mDrawerTitle; 
    private CharSequence mTitle; 
    ActionBarDrawerToggle mDrawerToggle; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mTitle = mDrawerTitle = getTitle(); 
     // get list items from strings.xml 
     mNavigationDrawerItemTitles = getResources().getStringArray(R.array.nav_drawer_items); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerToggle = new ActionBarDrawerToggle(
       this, 
       mDrawerLayout, 
       R.mipmap.ic_drawer, 
       R.string.drawer_open, 
       R.string.drawer_close 
     ) 
     { 

      /** Called when a drawer has settled in a completely closed state. */ 
      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view); 
       getSupportActionBar().setTitle(mTitle); 
      } 

      /** Called when a drawer has settled in a completely open state. */ 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       getSupportActionBar().setTitle(mDrawerTitle); 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 

     // 2.1 create ActionBarDrawerToggle 
     ObjectDrawerItem[] drawerItem = new ObjectDrawerItem[5]; 

     drawerItem[0] = new ObjectDrawerItem(R.mipmap.timesheet, "Time Sheet"); 
     drawerItem[1] = new ObjectDrawerItem(R.mipmap.claims, "Claims"); 
     drawerItem[2] = new ObjectDrawerItem(R.mipmap.project_icon, "Project"); 
     drawerItem[3] = new ObjectDrawerItem(R.mipmap.report, "Report"); 
     drawerItem[4] = new ObjectDrawerItem(R.mipmap.view, "View"); 



     DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.listview_item_row, drawerItem); 
     mDrawerList.setAdapter(adapter); 



    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void setTitle(CharSequence title) { 
     mTitle = title; 
     getSupportActionBar().setTitle(mTitle); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mDrawerToggle.syncState(); 
    } 


    public class DrawerItemClickListener implements ListView.OnItemClickListener { 


     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      selectItem(position); 
     } 


     private void selectItem(int position) { 

      Fragment fragment = null; 

      switch (position) { 
       case 0: 
        fragment=new Information(); 
        break; 
       case 1: 
        fragment=new Claims1(); 
        Bundle bundle=new Bundle(); 
        bundle.putLong("ab",WorkDetailsTable.ab); 
        fragment.setArguments(bundle); 
        break; 

       case 2: 
        fragment=new Project(); 
        break; 

       case 3: 
        fragment=new Report(); 
        break; 

       case 4: 
        fragment=new ViewView(); 
        break; 

       default: 
        break; 
      } 

      if (fragment != null) { 
       FragmentManager fragmentManager = getFragmentManager(); 
       fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

       mDrawerList.setItemChecked(position, true); 
       mDrawerList.setSelection(position); 
       setTitle(mNavigationDrawerItemTitles[position]); 
       mDrawerLayout.closeDrawer(mDrawerList); 

      } else { 
       Log.e("MainActivity", "Error in creating fragment"); 
      } 
     } 
    } 

然而,我的應用程序崩潰。我需要在我的claims1.xml中添加任何東西嗎?

11-15 13:22:27.384 4199-4199/com.example.project.project E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.project.project, PID: 4199 
    java.lang.NullPointerException: Attempt to invoke virtual method 'int android.app.ActionBar.getDisplayOptions()' on a null object reference 
      at com.example.project.project.Claims1.onCreateView(Claims1.java:26) 
      at android.app.Fragment.performCreateView(Fragment.java:2220) 
      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 

(Claims1.java:26)

actionBar.setDisplayOptions(actionBar.getDisplayOptions() 
       | ActionBar.DISPLAY_SHOW_CUSTOM); 
+1

貴活動得到了動作條? –

+0

@Jedil對不起,上面的代碼是我所有的活動代碼... – John

+1

這不是你的活動代碼,它是片段。 –

回答

0

您使用錯誤的方法getActionBar。您正在使用AppCompatActivity,因此操作欄來自支持的庫。 您應該使用((AppCompatActivity) getActivity()).getSupportActionBar();

如果你不能使投getActionBar詢問有關android.app.ActionBar 但使用AppCompatActivity你需要問android.support.v7.app.ActionBar

+0

您的意思是我必須將'getActionBar'改成'((AppCompatActivity)getActivity())。getSupportActionBar();'?如何處理這行'actionBar.setDisplayOptions(actionBar.getDisplayOptions() | ActionBar.DISPLAY_SHOW_CUSTOM);'? 。 – John

+0

'android.support.v7.app.ActionBar myActionBar =((AppCompatActivity)getActivity())getSupportActionBar();' 然後用'myActionBar'變量調用任何你想要 –

+0

謝謝,但爲什麼圖標不在右上方顯示? – John