java - 如何添加列表 Activity 而不是 fragment ?

标签 java android android-fragments android-activity

我有一个带有抽屉导航的应用程序。当用户从抽屉导航列表中选择一个选项时,它会移动到一个 fragment 。我想删除这个 fragment ,并想添加一个带有 ListView 的列表 Activity ,因为我需要显示一个列表。

MainActivity.java

public class MainActivity extends Activity {
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

    // nav drawer title
    private CharSequence mDrawerTitle;

    // used to store app title
    private CharSequence mTitle;

    // slide menu items
    private String[] navMenuTitles;
    private TypedArray navMenuIcons;

    private ArrayList<NavDrawerItem> navDrawerItems;
    private NavDrawerListAdapter adapter;

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

        mTitle = mDrawerTitle = getTitle();

        // load slide menu items
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

        // nav drawer icons from resources
        navMenuIcons = getResources()
                .obtainTypedArray(R.array.nav_drawer_icons);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

        navDrawerItems = new ArrayList<NavDrawerItem>();

        /*// adding nav drawer items to array
        // Full Draw Schedule
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
        // Draw Schedule - Rs. 100/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
        // Draw Schedule - Rs. 200/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
        // Draw Schedule - Rs. 700/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
        // Draw Schedule - Rs. 1,500/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
        //Draw Schedule - Rs. 7,500/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
        //Draw Schedule - Rs. 15,000/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(6, -1)));
        //Draw Schedule - Rs. 25,000/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[7], navMenuIcons.getResourceId(7, -1)));
        //Draw Schedule - Rs. 40,000/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[8], navMenuIcons.getResourceId(8, -1)));
        // What's hot, We  will add a counter here (50+ will show as a counter infront of "What's Hot")
        //navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));*/


        // adding nav drawer items to array
        // Full Draw Schedule
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[0]));
        // Draw Schedule - Rs. 100/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[1]));
        // Draw Schedule - Rs. 200/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[2]));
        // Draw Schedule - Rs. 700/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[3]));
        // Draw Schedule - Rs. 1,500/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[4]));
        //Draw Schedule - Rs. 7,500/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[5]));
        //Draw Schedule - Rs. 15,000/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[6]));
        //Draw Schedule - Rs. 25,000/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[7]));
        //Draw Schedule - Rs. 40,000/-
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[8]));
        //Prize money
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[9]));
        // What's hot, We  will add a counter here (50+ will show as a counter infront of "What's Hot")
        //navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));


        //Recycle the typed array
        //navMenuIcons.recycle();

        mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

        // setting the nav drawer list adapter
        adapter = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems);
        mDrawerList.setAdapter(adapter);

        // enabling action bar app icon and behaving it as toggle button
        getActionBar().setDisplayHomeAsUpEnabled(true);
        if(Build.VERSION.SDK_INT > 13)
            getActionBar().setHomeButtonEnabled(true);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, //nav menu toggle icon
                R.string.app_name, // nav drawer open - description for accessibility
                R.string.app_name // nav drawer close - description for accessibility
        ) {
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            // on first time display view for first nav item
            displayView(0);
        }
    }

    /**
     * Slide menu item click listener
     * */
    private class SlideMenuClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // display view for selected nav drawer item
            displayView(position);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // toggle nav drawer on selecting action bar app icon/title
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action bar actions click
        switch (item.getItemId()) {
        case R.id.action_settings:
            finish();
            System.exit(0);
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    /* *
     * Called when invalidateOptionsMenu() is triggered
     */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if nav drawer is opened, hide the action items
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    /**
     * Diplaying fragment view for selected nav drawer list item
     * */
    private void displayView(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new FindPeopleFragment();
            break;
        case 2:
            fragment = new PhotosFragment();
            break;
        case 3:
            fragment = new CommunityFragment();
            break;
        case 4:
            fragment = new PagesFragment();
            break;
        case 5:
            fragment = new WhatsHotFragment();
            break;

        default:
            break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();

            // update selected item and title, then close the drawer
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            setTitle(navMenuTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }

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

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

    @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);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

}

我想替换以下 fragment HomeFragment.java

public class HomeFragment extends Fragment {

    public HomeFragment(){}

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

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

        return rootView;
    }
}

具有以下列表 Activity FullListActivity.java

public class FullListActivity extends ListActivity  {

    TextView content;
    String[] values;
    String theUrl, amount;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view_full_schedule);


        content = (TextView)findViewById(R.id.output);

        //listView = (ListView) findViewById(R.id.list);
        values = new String[]{
                        "03-08-2015: Rs. 25,000 in Lahore", "03-08-2015: Rs. 7,500 in Rawalpindi",
                        "17-08-2015: Rs. 1,500 in Karachi", "17-08-2015: Rs. 100 in Multan",
                                "Prize"
                };

        // Define a new Adapter
        // First parameter - Context
        // Second parameter - Layout for the row
        // Third - the Array of data

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, values);


        // Assign adapter to ListView
        setListAdapter(adapter);


    }


    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {

        super.onListItemClick(l, v, position, id);

        try {

            // ListView Clicked item index
            //int itemPosition     = position;

            // ListView Clicked item value
            String  itemValue    = (String) l.getItemAtPosition(position);


            //Toast.makeText(v.getContext(), "Date: \n" + theUrl, Toast.LENGTH_LONG).show();

            if (values[position].contains("Prize")) startActivity(new Intent(this, PrizeMoney.class));
            else if(values[position].contains("100")) amount = "100";
            else if(values[position].contains("200")) amount = "200";
            else if(values[position].contains("750")) amount = "750";
            else if(values[position].contains("1,500")) amount = "1500";
            else if(values[position].contains("7,500")) amount = "7500";
            else if(values[position].contains("15,000")) amount = "15000";
            else if(values[position].contains("25,000")) amount = "25000";
            else if(values[position].contains("40,000")) amount = "40000";

            theUrl = values[position].substring(0, 10);
            content.setText("Click : \n  Position :" + position + "  \n  ListItem : " + itemValue + "  \n" +
                    "  URL : "+theUrl+"  \n"+"  AMount : "+amount);
        }
        catch (Exception e)
        {
            //e.printStackTrace();
        }


    }

}

最佳答案

我已经找到解决办法了!我现在正在使用ListFragment。

FullScheduleFragment.java

public class FullScheduleFragment extends ListFragment implements OnItemClickListener {

    String[] values;
    String theUrl, amount;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_full_schedule_item_list, container, false);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {

        super.onActivityCreated(savedInstanceState);

        ArrayAdapter<CharSequence> adapter;
        adapter = ArrayAdapter.createFromResource(
                getActivity(),
                R.array.Draws,     //Draws is a string-array in string.xml
                android.R.layout.simple_list_item_1);

        setListAdapter(adapter);
        getListView().setOnItemClickListener(this);

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {

        Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT)
                .show();

    }

}

MainActivity.java中,我刚刚替换了

fragment = new HomeFragment();

fragment = new FullScheduleFragment();

private void displayView(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
        case 0:
        ...

关于java - 如何添加列表 Activity 而不是 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32244503/

相关文章:

java - SynchronizedMap 类中重载构造函数的目的

java - 游戏 : Algorithm for spawning enermies at game/window egdes

android - 是否可以持有多个唤醒锁?

java - 用户填充的 ListView 中的 TextView 值的总和

android - Android Honeycomb中的 fragment 列表和gridview

java - 如何管理Web服务调用和数据库之间的分布式事务协调?

java - Jenkins 重启后不显示作业

android - Android fragment 上的 "Content view not yet Created"

Android 如何在键盘弹出时忽略自动调整大小?

java - Cplex Java 如何避免打印输出?