簡體   English   中英

使用導航抽屜分割UI

[英]Fragment UI's using navigation drawer

因此,我在項目的MainActivity中具有導航抽屜功能,並且我的導航抽屜鏈接鏈接到一個片段,但是我不知道如何向其中添加UI。 到目前為止,像findViewById(r.id.code)之類的東西,以及試圖設置TextView的東西,給我帶來了諸如unreachable code類的錯誤。

主要活動

    package yc.android.yourchallenger;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

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

 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     mNavigationDrawerItemTitles = getResources().getStringArray(R.array.navigation_drawer_items_array);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        // Set the adapter for the list view
        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.nav_drawer, mNavigationDrawerItemTitles));
        // Set the list's click listener
        mDrawerList.setOnItemClickListener((OnItemClickListener) new DrawerItemClickListener());

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(
                this,                  /* host Activity */
                mDrawerLayout,         /* DrawerLayout object */
                R.drawable.ic_launcher,  /* nav drawer icon to replace 'Up' caret */
                R.string.drawer_open,  /* "open drawer" description */
                R.string.drawer_close  /* "close drawer" description */
                ) {

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

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

        // Set the drawer toggle as the DrawerListener
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);         
}

 @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Pass the event to ActionBarDrawerToggle, if it returns
        // true, then it has handled the app icon touch event
        if (mDrawerToggle.onOptionsItemSelected(item)) {
          return true;
        }
        // Handle your other action bar items...

        return super.onOptionsItemSelected(item);
    }

 private 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 CreateFragment();
     break;

     case 1: fragment = new ReadFragment();
     break;

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

     default:
         break;
     }
    /* Bundle args = new Bundle();
     args.putInt("key", position);
     fragment.setArguments(args);*/
    if(fragment != null){ 
         FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                           .replace(R.id.content_frame, fragment)
                           .commit();
         // Highlight the selected item, update the title, and close the drawer
            mDrawerList.setItemChecked(position, true);
            setTitle(mNavigationDrawerItemTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
    }
 }   

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


}

這是我的片段包yc.android.yourchallenger之一;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ReadFragment extends Fragment {
public ReadFragment() {
}

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

    View rootView = inflater.inflate(R.layout.fragment_create, container, false);
    TextView view = findViewById(R.id.view);
    return rootView;
}

}

沒有理由使在onCreateView()創建的視圖靜態(re:Droidy)。 只需在onCreateView()之后的片段生命周期內的任意位置調用getView() onCreateView()

在您的示例中,您所需要做的就是更改

TextView view = findViewById(R.id.view);

TextView view = (TextView) rootView.findViewById(R.id.view);

您可以在任何ViewGroup上調用findViewById(int)來查找其子級。 Activity調用它是一種便捷的方法,它使用setContentView()設置的視圖。

因此,如果您想稍后在Fragment生命周期中找到視圖,則可以執行以下操作:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    TextView view = (TextView) getView().findViewById(R.id.view);
}

您也可以在onViewCreated(View view, Bundle savedInstanceState)實例化視圖,其中根視圖是第一個參數。

rootView設為privatestatic ),並在默認構造函數之前聲明它。 然后,在將布局擴展為rootView之后,可以使用rootView如下訪問所有UI元素。

TextView view = (TextView) rootView.findViewById(R.id.view);

Fragment類中使用getActivity()代替關鍵字this
希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM