2015-09-20 32 views
0

我有一个在MainActivity.java工作RecyclerView和片段“概述”为常规事件,但我想实现第二个单独的片段(“提醒“)。在我的MainActivity的OnCreate中,第一个片段被设置,我面临着无法两次使用setContentView的问题。实现两个RecyclerViews在单独的片段,但在同一个活动

这里是我的MainActivity.java:

public class MainActivity extends AppCompatActivity 
     implements NavigationDrawerFragment.NavigationDrawerCallbacks { 

    /** 
    * Fragment managing the behaviors, interactions and presentation of the navigation drawer. 
    */ 
    private NavigationDrawerFragment mNavigationDrawerFragment; 

    /** 
    * Used to store the last screen title. For use in {@link #restoreActionBar()}. 
    */ 
    private CharSequence mTitle; 

    private RecyclerView mRecyclerView; 
    private RecyclerView.LayoutManager mLayoutManager; 
    OverviewAdapter mAdapter; 

    private RecyclerView reminderRecyclerView; 
    private RecyclerView.LayoutManager reminderLayoutManager; 
    RemindersAdapter reminderAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mNavigationDrawerFragment = (NavigationDrawerFragment) 
       getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); 
     mTitle = getTitle(); 

     // Set up the drawer. 
     mNavigationDrawerFragment.setUp(
       R.id.navigation_drawer, 
       (DrawerLayout) findViewById(R.id.drawer_layout)); 

     mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 


     mRecyclerView.setHasFixedSize(true); 
     mLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(mLayoutManager); 

     events(); 
     mAdapter = new OverviewAdapter(events); 
     mRecyclerView.setAdapter(mAdapter); 

    } 

    @Override 
    public void onNavigationDrawerItemSelected(int element) { 
     // update the main content by replacing fragments 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     Fragment fragment = new Fragment(); 
     element++; 
     // int frame = R.id.container; 

     String position = "Overview"; 
     switch(element) { 

      case 1: 
       position = "Overview"; 
       mTitle = getString(R.string.title_section1); 
       // frame = R.id.container; 
       break; 

      case 2: 
       position = "Reminders"; 
       mTitle = getString(R.string.title_section2); 
       fragment = new Reminders(); 

       setContentView(R.layout.reminder_recycler); 
       // REMINDERS RECYCLERVIEW SETUP BELOW 
       setContentView(R.layout.reminder_recycler); 
       reminderRecyclerView = (RecyclerView) findViewById(R.id.my_reminder_recycler_view); 

       // use this setting to improve performance if you know that changes 
       // in content do not change the layout size of the RecyclerView 
       reminderRecyclerView.setHasFixedSize(true); 

       reminderEvents(); 
       // use a linear layout manager 
       reminderLayoutManager = new LinearLayoutManager(this); 
       reminderRecyclerView.setLayoutManager(reminderLayoutManager); 


       reminderAdapter = new RemindersAdapter(reminderEventsList); 
       reminderRecyclerView.setAdapter(reminderAdapter); 

       break; 

      case 3: 
       position = "Categories"; 
       mTitle = getString(R.string.title_section3); 
       fragment = new Categories(); 
       // frame = R.id.categories; 
       break; 

      case 4: 
       position = "Smart Suggestions"; 
       mTitle = getString(R.string.title_section4); 
       fragment = new SmartSuggestions(); 
       // frame = R.id.smart_suggestions; 
       break; 

     } 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, fragment) 
       .commit(); 

    } 
} 

我报错提醒类中的一个空指针异常,如下图所示:

public class Reminders extends Fragment { 

private RecyclerView reminderRecyclerView; 
private RecyclerView.LayoutManager reminderLayoutManager; 
RemindersAdapter reminderAdapter; 
Context context; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.reminders, container, false); 

    // Inflate the layout for this fragment 
    return rootView; 



} 

public List<ReminderEvents> reminderEventsList = new ArrayList<>(); 
public void reminderEvents() { 

    reminderEventsList.add(new ReminderEvents("Example reminder", "Wed 12 July")); 
    reminderEventsList.add(new ReminderEvents("Example reminder1", "Wed 12 July")); 
    reminderEventsList.add(new ReminderEvents("Example reminder2", "Wed 12 July")); 
    reminderEventsList.add(new ReminderEvents("Example reminder3", "Wed 12 July")); 

    } 

} 
+0

请通过您的交换机后发布您的日志输出 – vishnus

+0

它似乎你正在用R.layout.reminder_recycle替换R.layout.activity_main使用setContentView()...做到这一点没关系......但是你试图使用R.id.container引用替换容器中存在的片段...并且似乎R.id.container在您的activity_main布局文件中,而不是在reminder_recycler布局文件中。所以这肯定会给你错误。因此,适当的解决方案按照@vishnus –

回答

1

的setContentView()应当只在调用一次你的活动。

在switch语句的情况下2应该看起来更像这个

case 2: 
      position = "Reminders"; 
      mTitle = getString(R.string.title_section2); 
      fragment = new Reminders(); 

      break; 

然后在乌尔片段的onCreateView,做好通胀

reminderRecyclerView = (RecyclerView) findViewById(R.id.my_reminder_recycler_view); 

      // use this setting to improve performance if you know that changes 
      // in content do not change the layout size of the RecyclerView 
      reminderRecyclerView.setHasFixedSize(true); 

      reminderEvents(); 
      // use a linear layout manager 
      reminderLayoutManager = new LinearLayoutManager(this); 
      reminderRecyclerView.setLayoutManager(reminderLayoutManager); 


      reminderAdapter = new RemindersAdapter(reminderEventsList); 
      reminderRecyclerView.setAdapter(reminderAdapter); 

我希望这是有帮助的。

+0

给出的答案移动膨胀到提醒片段意味着我不得不使用'getView()'使用'findViewById()',这给了我“尝试调用虚拟方法'android。 view.View android.view.View.findViewById(int)'空对象引用“错误仍然。 – horizontempest

+0

请把你的基础知识对吧! – vishnus

相关问题