Navigation Drawer mit Inhalt füllen

  • 6 Antworten
  • Letztes Antwortdatum
D

DevelopingPhil

Neues Mitglied
1
Hallo Leute,

habe jetzt meinen ersten Navigation Drawer gebaut :thumbup:

Sieht auch soweit echt cool aus, aber jetzt möchte ich zum Beispiel unter einem Punkt einige Inputfelder einbauen. Wie kann ich jetzt den Inhalt der einzelnen Seiten editieren? Wie macht ihr das?

Habe meinen Navigation Drawer à la https://www.youtube.com/watch?v=WTRNI_r7ccI gebaut und hat super geklappt.

Ich würde es gerne so machen, dass ich im Navi halt ein paar Begriffe und den Begriffen möchte ich bestimmte XML Layouts zuordnen, das müsste doch gehen oder?

MfG
DevelopingPhil
 
Zuletzt bearbeitet:
Hallo,
das freut mich. :)
Hab mir das Video nicht angesehen, aber da in den Videos meistens sowieso nur die Doku "durchgekaut" wird, kann ein (genauer) Blick in diese nie schaden. Der Navigation drawer ist dort auch ziemlich gut erklärt.. Bzw anhand der Kommentierung des Beispiels lässt sich vieles herauslesen.

Btw: Wenn du etwas von deinem Code zeigst und die Frage etwas konkreter stellst, könnte dir wahrscheinlich besser geholfen werden :)

Grüße
 
Das ist meine MainActivity.java:
Code:
public class MainActivity extends ActionBarActivity {
	
	DrawerLayout mDrawerLayout;
	ListView mDrawerList;
	ActionBarDrawerToggle mDrawerToggle;
	String mTitle = "";
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mTitle = (String)getTitle();
        
        mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        
        mDrawerList = (ListView)findViewById(R.id.drawer_list);
        
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer,
        		R.string.drawer_open, R.string.drawer_close) {
        	
        	@Override
        	public void onDrawerClosed(View drawerView) {
        		getActionBar().setTitle(mTitle);
        		invalidateOptionsMenu();
        		
        	}
        	
        	@Override
        	public void onDrawerOpened(View drawerView) {
        		getActionBar().setTitle("SciVias");
        		invalidateOptionsMenu();
        	}
        };
        
        mDrawerLayout.setDrawerListener(mDrawerToggle);
    	
    	ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), R.layout.drawer_list_item, getResources().getStringArray(R.array.functions));
    	
    	mDrawerList.setAdapter(adapter);
    	
    	getActionBar().setHomeButtonEnabled(true);
    	
    	getActionBar().setDisplayHomeAsUpEnabled(true);
    	
    	mDrawerList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				
				String[] functions = getResources().getStringArray(R.array.functions);
				
				mTitle = functions[position];
				
				NaviFragment nFragment = new NaviFragment();
				
				Bundle data = new Bundle();
				
				data.putInt("position", position);
				
				nFragment.setArguments(data);
				
				android.app.FragmentManager fragmentManager = getFragmentManager();
				
				android.app.FragmentTransaction ft = fragmentManager.beginTransaction();
				
				ft.replace(R.id.content_frame, nFragment);
				
				ft.commit();
				
				mDrawerLayout.closeDrawer(mDrawerList);
				
			}
    		
    	});
    }
    
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
    	super.onPostCreate(savedInstanceState);
    	mDrawerToggle.syncState();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(mDrawerToggle.onOptionsItemSelected(item)) {
        	return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
    	boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    	menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    	return super.onPrepareOptionsMenu(menu);
    }
    
}

Hier meine NaviFragment.java:
Code:
public class NaviFragment extends Fragment {
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		
		int position = getArguments().getInt("position");
		
		String[] functions = getResources().getStringArray(R.array.functions);
		
		View v = inflater.inflate(R.layout.fragment_layout, container, false);
		
		TextView tv = (TextView) v.findViewById(R.id.tv_content);
		
		tv.setText(functions[position]);
		
		getActivity().getActionBar().setTitle(functions[position]);
		
		return v;
	}
}

Ich habe jetzt zum Beispiel in dem String Array functions die Sachen Heute, Aufgaben und Sonstiges. Dann möchte ich jedem Item in dem String Array ein Layout zuordnen, damit das Ganze auch eine App wird :thumbsup:
 
Du hast in deiner MaknActiviy die Methode onItemClick. Der wird jedesmal aufgerufen wenn du auf ein item in deiner Navigation klickst. Das Argument int Position sagt dir die Position. D.h. Du kannst dort sagen if(position == 1) (bzw is gleich 2/3/4) und dann dort ein eigenes Fragment laden. Also statt immer das NaviFragment immer ein anderes...
 
Danke aber das wusste ich doch schon :biggrin:

Das Problem liegt ja bei mir eher, wie kann ich ein anderes Layout/ Fragment laden? Ich habe ja in der Main ein Fragment und das Navi. In das Fragment müsste ich dann immer die jeweiligen Inhalt laden, nur wie?
 
In der Doku hast du nicht nachgeschlagen, oder? :)

Code:
  // Insert the fragment by replacing any existing fragment
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
                   .replace(R.id.content_frame, fragment)
                   .commit();
zu finden:
Creating a Navigation Drawer | Android Developers

Tipp: Lese dir obigen Artikel erst einmal komplett durch und kläre Ungereimtheiten im Vorfeld ab.
Wenn man anders vorgeht (sprich: "gleich irgendwie startet") ist die Wahrscheinlichkeit groß, dass man am Ende vieles doppelt und dreifach macht.
Das ist nur meine persönliche Einschätzung zum Thema NavDrawer...

Falls du es vorhin überlesen hattest: Das Beispiel, dass Google hier bereitstellt ist wirklich viel wert. ;)

Grüße
 
Zuletzt bearbeitet:
Vielen Dank Leute und ihr hattet Recht, das Ganze ist doch einfacher als ich dachte. Komme gut voran!
 
  • Danke
Reaktionen: ui_3k1
Zurück
Oben Unten