2016-01-17 2 views
-1

Я пытаюсь создать скользящий ящик. Я потратил навсегда получение моего импорта в соответствии с моим кодом, с точки зрения getSupportActionBar против getActionBar и т. Д., Я подозреваю, что проблема находится где-то в файле activity_main.xml, но я не понимаю, что туда положить.не может решить символ «панель инструментов» r.id.toolbar

MainActivity.java

package me.paxana.alerta; 

import android.app.Activity; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.app.Fragment; 
import android.content.Intent; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MenuInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.RelativeLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.widget.Toolbar; 

import com.parse.ParseUser; 

import java.util.ArrayList; 
import java.util.List; 

import butterknife.Bind; 
import butterknife.ButterKnife; 
import me.paxana.alerta.adapter.SlidingMenuAdapter; 
import me.paxana.alerta.fragment.Fragment1; 
import me.paxana.alerta.fragment.Fragment2; 
import me.paxana.alerta.fragment.Fragment3; 
import me.paxana.alerta.model.ItemSlideMenu; 

public class MainActivity extends AppCompatActivity { 
    public static final String TAG = MainActivity.class.getSimpleName(); 
    private List<ItemSlideMenu> listSliding; 
    private SlidingMenuAdapter adapter; 
    private ListView listViewSliding; 
    private DrawerLayout drawerLayout; 
    private android.support.v7.app.ActionBarDrawerToggle actionBarDrawerToggle; 
    private Toolbar mToolbar; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.bind(this); 


     ParseUser currentUser = ParseUser.getCurrentUser(); 
      if (currentUser == null) { 
       navigateToLogin(); 
      } 

     else { 
       Log.i(TAG, currentUser.getUsername()); 
      } 

     listViewSliding = (ListView)findViewById(R.id.lv_sliding_menu); 
     drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); 
     listSliding = new ArrayList<>(); 
     //add item for sliding list 
     listSliding. add(new ItemSlideMenu(R.drawable.ic_action_settings, "Settings")); 
     listSliding.add(new ItemSlideMenu(R.drawable.ic_action_about, "About")); 
     listSliding.add(new ItemSlideMenu(R.mipmap.ic_launcher, "Android")); 
     adapter = new SlidingMenuAdapter(this, listSliding); 
     listViewSliding.setAdapter(adapter); 


     //display icon to open/close slider 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 
     assert getActionBar() != null; 
     getActionBar().setDisplayHomeAsUpEnabled(true); 

     //set title 
     setTitle(listSliding.get(0).getTitle()); 
     //item selected 
     listViewSliding.setItemChecked(0, true); 
     //close menu 
     drawerLayout.closeDrawer(listViewSliding); 
     //handle on item click 
     listViewSliding.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       //set title 
       setTitle(listSliding.get(position).getTitle()); 
       //item selected 
       listViewSliding.setItemChecked(position, true); 
       //close menu 
       drawerLayout.closeDrawer(listViewSliding); 
      } 

     }); 

     actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed) { 
      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       invalidateOptionsMenu(); 
      } 
     }; 

     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

    } 

    private void navigateToLogin() { 
     Intent intent = new Intent(this, LoginActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     startActivity(intent); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(actionBarDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     int itemId = item.getItemId(); 
     if (itemId == R.id.action_logout) { 
      ParseUser.logOut(); 
      navigateToLogin(); 

     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     actionBarDrawerToggle.syncState(); 
    } 
//create method replace fragment 
    private void replaceFragment(int pos) { 
     android.support.v4.app.Fragment fragment = null; 
     switch (pos) { 
      case 0: 
       fragment = new Fragment1(); 
        break; 
      case 1: 
       fragment = new Fragment2(); 
       break; 
      case 2: 
       fragment = new Fragment3(); 
       break; 
      default: 
       fragment = new Fragment1(); 
       break; 
     } 
     if(null != fragment) { 
      android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
      android.support.v4.app.FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.replace(R.id.main_content, fragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 

     } 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/drawer_layout" 
    tools:context="me.paxana.alerta.MainActivity"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/main_content"> 
    </RelativeLayout> 

    <ListView 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:id="@+id/lv_sliding_menu" 
     android:background="#FFFFFF" 
     android:choiceMode="singleChoice" 
     android:layout_gravity="start" /> 
</android.support.v7.widget.Toolbar> 
+0

Ваша панель инструментов имеет id 'drawer_layout'. Почему вы используете панель инструментов? – Blackbelt

ответ

0

Почему вы используете android.support.v7.widget.Toolbar для вашего основного тега main_layout? Это не то, что говорит андроид.

Вы должны использовать эту панель инструментов только для использования панели инструментов с вашей деятельностью.

См: setContentView(R.layout.activity_main);

Это не будет работать вообще.

Используйте это так:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="me.paxana.alerta.MainActivity"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@color/ColorPrimary" 
     app:layout_collapseMode="pin" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

    <ListView 
     android:id="@+id/lv_sliding_menu" 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="#FFFFFF" 
     android:choiceMode="singleChoice" /> 
</RelativeLayout> 

Я предпочел бы использовать CoordinatorLayout с AppCompat или реализации этого панели инструментов тоже.

Кроме того,

//display icon to open/close slider 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 

Здесь вы использовали toolbar как то Toolbar идентификатор.

Используйте его, как это в вашем XML:

android:id="@+id/toolbar" 

Приведенный выше код должен работать now.Also, вы много не использовали в своих импорта, как:

import android.support.v7.app.ActionBarActivity; 

и т.д.

Прочтите документы, пожалуйста.

-1

Используйте этот

R.id.drawer_layout 

Вместо того

R.id.toolbar 
+0

Он предупреждает меня «Идентификатор R.id.drawer_layout уже рассмотрен в этом методе. Возможная ошибка копирования и вставки?» Тогда, когда я запустил его, я получаю: java.lang.RuntimeException: Невозможно запустить Activity ComponentInfo {me.paxana.alerta/me.paxana.alerta.MainActivity}: java.lang.ClassCastException: android.support.v7.widget .Toolbar не может быть отброшен в android.support.v4.widget.DrawerLayout –

+0

Я попытался изменить тэг xml на v4.widget.drawerlayout вместо панели инструментов, но не на кости –

+0

Я думаю, что ваш XML немного испорчен. Если вы скопировали его где-нибудь, перепишите его с помощью новой копии. Идентификатор вашей панели инструментов - drawer_layout. Это звучит не так. – AndroidMechanic

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