2016-10-13 3 views
0

Я хочу установить SettingsDrawer как фрагмент в нескольких действиях (НастройкиДайзер отобразит после нажатия на определенную кнопку). Фон ящика настроек должен быть z текущей деятельностью, к сожалению, я попытался установить фрагмент static (в деятельности xml), а также динамически. Для первой попытки я получил раздувание ошибки фрагмента класса, а для динамического ive - нулевой указатель. Вот моя версия динамически:Настройки Ящик как фрагмент

фрагмент SettingsDrawer Класс

public class SettingsDrawer extends Fragment{ 
    Context mContext; 
    ArrayList<SettingsDrawerItem> items; 
    ListView listView; 
    DrawerLayout mDrawerLayout; 
    RelativeLayout content; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.settings_drawer_layout, null); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     mContext=getContext(); 
     mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawerLayout); 
     listView = (ListView) view.findViewById(R.id.settingsList); 
     DrawListAdapter adapter = new DrawListAdapter(mContext, items); 
     listView.setAdapter(adapter); 
     content = (RelativeLayout)view.findViewById(R.id.drawerPane); 
     openAndCollapseDrawerList(); 

    } 
    public SettingsDrawer() { 
     mContext=getContext(); 
     items = new ArrayList<>();} 
public void openAndCollapseDrawerList() 
    { 
     if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) 
      mDrawerLayout.closeDrawer(content); 

    else 
     mDrawerLayout.openDrawer(content); 
    } 

Настройки Ящика раскладка

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <RelativeLayout 
     android:layout_width="280dp" 
     android:layout_height="match_parent" 
     android:id="@+id/drawerPane" 
     android:layout_gravity="start"> 

     <ListView 
      android:id="@+id/settingsList" 
      android:layout_width="280dp" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/logoBox" 
      android:choiceMode="singleChoice" 
      android:background="#ffffffff" /> 
    </RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

активность Часть, где я инициализировать фрагмент

private void initSettingsDrawer() { 
     Button settingsDrawerButton =(Button)findViewById(R.id.settingsDrawer); 
     settingsDrawerButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Fragment fragment = null; 
       Class fragmentClass = null; 
       fragmentClass = SettingsDrawer.class; 
       try { 
        fragment = (Fragment) fragmentClass.newInstance(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       FragmentManager fragmentManager = getSupportFragmentManager(); 
       fragmentManager.beginTransaction().replace(R.id.activity_main, fragment).commit(); 
      } 
     }); 
    } 

Это дает мне исключение nullPointer.

+1

Исключение нулевого указателя приходит на какой линии? вы можете вставить журнал сбоев –

+0

Невозможно найти вид активности в строке fragmentManager.beginTransaction(). replace (R.id.activity_main, fragment) .commit(); – Expiredmind

+1

ваш фрагмент null, я думаю. можете ли вы вставить свой код фрагмента? –

ответ

1

добавить этот код в SettingsDrawer

static SettingsDrawer fragment; 
static SettingsDrawer getInstance(){ 
if(fragment==null){ 
    return new SettingsDrawer(); 
}else{ 
    return fragment; 
} 

и initSettingsDrawer:

fragment = SettingsDrawer.getInstance(); 
+0

в SettingsDrawer getInstance(). Ive получил предупреждение о том, что фрагмент нестатистического поля нельзя ссылаться из статического контекста, а функция getInstance должна быть статической если я хочу использовать его в действии – Expiredmind

+0

Да, он должен быть статичным –

+0

Я думаю, что я решу свою проблему, но у меня есть другой:/Ive получил DrawerLayout, должен быть измерен с помощью MeasureSpec.EXACTLY. ошибка, даже если ширина и высота макета в DrawerLayout и activity_main устанавливаются как match_parent – Expiredmind

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