如何开始行动吧一个片段的微调? [英] How To Start A Fragment From Spinner in action bar?

查看:196
本文介绍了如何开始行动吧一个片段的微调?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个应用程序与滑动抽屉,15片段(刷卡)卡口与查看传呼机编号1-15,微调在操作栏,查看传呼机用于显示15片段
我需要的是当我选择选项4(对于如)在微调下拉我想要的屏幕要与4查看传呼机同时显示片段4
我怎么能Acheive那??

i have got an app with Sliding Drawer,15 Fragments(Swipe) Tabs With View Pager Numbered 1-15,Spinner In Action Bar,View Pager For Showing The 15 Fragments What I Need Is When i select Option 4(For eg) In The Spinner DropDown i Want the Screen To Display Fragment 4 along with view pager for 4 How Can i Acheive That??

我MainActivity.java

My MainActivity.java

public class MainActivity extends FragmentActivity implements  ActionBar.OnNavigationListener{

private static final String TAG = MainActivity.class.getSimpleName();

private DrawerLayout mDrawerLayout;
private ActionBar actionBar;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private ArrayList<SpinnerNavItem> navSpinner;
private TitleNavigationAdapter adapter;

private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] mDrawerItmes;

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

    mTitle = mDrawerTitle = getTitle();
    actionBar = getActionBar();
    // Hide the action bar title
    actionBar.setDisplayShowTitleEnabled(false);

    // Enabling Spinner dropdown navigation
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    navSpinner = new ArrayList<SpinnerNavItem>();
    navSpinner.add(new SpinnerNavItem("MOVIE1", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE2", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE3", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE4", R.drawable.ic_incmp));  
    navSpinner.add(new SpinnerNavItem("MOVIE5", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE6", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE7", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE8", R.drawable.ic_incmp));  
    navSpinner.add(new SpinnerNavItem("MOVIE9", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE10", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE11", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE12", R.drawable.ic_incmp));  
    navSpinner.add(new SpinnerNavItem("MOVIE13", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE14", R.drawable.ic_incmp));
    navSpinner.add(new SpinnerNavItem("MOVIE15", R.drawable.ic_incmp));

    adapter = new TitleNavigationAdapter(getApplicationContext(), navSpinner);

    // assigning the spinner navigation     
    actionBar.setListNavigationCallbacks(adapter, this);

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

    // set a custom shadow that overlays the main content when the drawer oepns
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,  GravityCompat.START);

    // Add items to the ListView
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mDrawerItmes));
    // Set the OnItemClickListener so something happens when a 
    // user clicks on an item.
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    // Enable ActionBar app icon to behave as action to toggle nav drawer
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(
            this, 
            mDrawerLayout, 
            R.drawable.ic_drawer, 
            R.string.drawer_open, 
            R.string.drawer_close
            ) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if(savedInstanceState == null) {
        navigateTo(0);
    }

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(mDrawerToggle.onOptionsItemSelected(item)) {
        return false;
    }

    return super.onOptionsItemSelected(item);
}

/*
 * When using the ActionBarDrawerToggle, you must call it during onPostCreate()
 * and onConfigurationChanged()
 */

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

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

private class DrawerItemClickListener implements OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.v(TAG, "LEVEL SELECTED");
        navigateTo(position);
    }

    }



    private void navigateTo(int position) {
    Log.v(TAG, "List View Item: " + position);

    switch(position) {
    case 0:
        /*getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.content_frame, 
                    ItemOne.newInstance(),
                    ItemOne.TAG).commit();*/
        getSupportFragmentManager()
        .beginTransaction()
             .replace(R.id.content_frame,TabbedActivity.newInstance(),TabbedActivity.TAG).commit();
        break;
    case 1:
        getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.content_frame,
                    TabbedActivity2.newInstance(),
                    TabbedActivity2.TAG).commit();
        break;
    }
}

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

@Override
public boolean onNavigationItemSelected(int position, long arg1) {
     SpinnerNavItem selectedItem = navSpinner.get(position );
     Fragment fragment = null;
     FragmentTransaction fragmentTransaction = getSupportFragmentManager()
             .beginTransaction();
     switch (position) {
     case 0:
         fragment = new Movie1();
         break;

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

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

     default:
         break;
     }
     fragmentTransaction.replace(R.id.content_frame ,fragment);
     fragmentTransaction.commit();
     return true;




     }
     }

和我的

activity_main.xml中

activity_main.xml

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


<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


<!-- android:layout_gravity="start" tells DrawerLayout to treat
     this as a sliding drawer on the left side for left-to-right
     languages and on the right side for right-to-left languages.
     The drawer is given a fixed width in dp and extends the full height of
     the container. A solid background is used for contrast
     with the content view. -->
<ListView
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#111"/>


</android.support.v4.widget.DrawerLayout>

TabbedActivity.java

TabbedActivity.java

public class TabbedActivity extends Fragment {

/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide
 * fragments for each of the sections. We use a
 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
 * will keep every loaded fragment in memory. If this becomes too memory
 * intensive, it may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
SectionsPagerAdapter mSectionsPagerAdapter;

public static final String TAG = TabbedActivity.class.getSimpleName();

/**
 * The {@link ViewPager} that will host the section contents.
 */
ViewPager mViewPager;


public static TabbedActivity newInstance() {
    return new TabbedActivity();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.activity_item_one, container, false);
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getChildFragmentManager());

    mViewPager = (ViewPager) v.findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    return v;
}

/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
        return new Movie1();
        case 1:
        return new Movie2(2);
        case 2:
        return new Movie3();
        case 3:
            return new Movie4();
        case 4:
            return new Movie5();
        case 5:
            return new Movie6();
        case 6:
            return new Movie7();
        case 7:
            return new Movie8();
        case 8:
            return new Movie9();
        case 9:
            return new Movie10();
        case 10:
            return new Movie11();
        case 11:
            return new Movie12();
        case 12:
            return new Movie13();
        case 13:
            return new Movie14();
        case 14:
            return new Movie15();
        case 15:
            return new Movie16();

        }
        return null;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 15;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        Log.v(TAG, "SECTION: " + position);
        switch (position) {
        case 0:
            return getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return getString(R.string.title_section2).toUpperCase(l);
        case 2:
            return getString(R.string.title_section3).toUpperCase(l);
        case 3:
            return getString(R.string.title_section4).toUpperCase(l);
        case 4:
            return getString(R.string.title_section5).toUpperCase(l);
        case 5:
            return getString(R.string.title_section6).toUpperCase(l);
        case 6:
            return getString(R.string.title_section7).toUpperCase(l);
        case 7:
            return getString(R.string.title_section8).toUpperCase(l);
        case 8:
            return getString(R.string.title_section9).toUpperCase(l);
        case 9:
            return getString(R.string.title_section10).toUpperCase(l);
        case 10:
            return getString(R.string.title_section11).toUpperCase(l);
        case 11:
            return getString(R.string.title_section12).toUpperCase(l);
        case 12:
            return getString(R.string.title_section13).toUpperCase(l);
        case 13:
            return getString(R.string.title_section14).toUpperCase(l);
        case 14:
            return getString(R.string.title_section15).toUpperCase(l);
        case 15:
            return getString(R.string.title_section15).toUpperCase(l);


        }
        return null;
    }
}

/**
 * A dummy fragment representing a section of the app, but that simply
 * displays dummy text.
 */
public static class DummySectionFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    public static final String ARG_SECTION_NUMBER = "section_number";

    public DummySectionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_tabbed_movie,
                container, false);

        return rootView;
    }
}

}

推荐答案

当用户选择微调项目必须执行这些步骤:

when user select spinner item you must do these steps:

先找到 TabbedActivity 致电

   TabbedActivity  f  =  (TabbedActivity) getSupportFragmentManager().findFragmentById(TabbedActivity.Tag);

然后你必须让 viewpager 在片段中,可以使用的getter - 二传手或声明它公共,我假设的getter 办法:

then you must get viewpager in that fragment, you can use getter-setter or declare it public, i assume getter approach:

   f.getViewPager().setCurrentItem(the position you want to go, false);

所以你的code必须是这样的:

so your code must be something like:

要小心你有两个 TabbedActivity ,我不知道你必须选择正确的一个在下面code哪一个是显示这样:

be careful you have two TabbedActivity and i do not know which one is showing so you must select the correct one in the below code:

@Override
public boolean onNavigationItemSelected(int position, long arg1) {

       TabbedActivity  f  =  (TabbedActivity) getSupportFragmentManager().findFragmentById(TabbedActivity.Tag);
      f.getViewPager().setCurrentItem(position, false);
      return true;

 }

这篇关于如何开始行动吧一个片段的微调?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆