自定义列表视图未显示在片段中

时间:2015-11-15 08:12:04

标签: android listview fragment

我指的是androidhive.info中的一个教程并尝试加入两个示例,其中我想将facebook类型的应用程序与导航抽屉示例链接,如网站所示。 虽然我设法合并了这两个例子但是我没有得到理想的结果。

  1. 我创建了一个本地服务器并访问了我的本地数据库。
  2. 我可以登录。我已将我的默认片段视图更改为显示厨房的第二个片段。
  3. 然而,当我抽出抽屉并点击房屋时,我最终得到了登录屏幕。请帮我解决这个问题。我对android很新,我无法搞清楚任何事情。
  4. 另外,请帮助我如何提高编码技能。

    以下是我的代码,其中实例化导航抽屉。

            package com.example.orderupdates;
    
    import java.util.ArrayList;
    
    import com.example.adapter.NavDrawerListAdapter;
    import com.example.config.OrderUpdateConfig;
    import com.example.model.NavDrawerItem;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.content.res.Configuration;
    import android.content.res.TypedArray;
    import android.os.Bundle;
    import android.support.v4.app.ActionBarDrawerToggle;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.ActionBarActivity;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    
    
    public class HomeActivity extends ActionBarActivity {
        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;
    
        @SuppressWarnings("deprecation")
        @SuppressLint("NewApi")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
            mTitle = mDrawerTitle = getTitle();
    
            // load slide menu items
            navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
    
            Log.d(MainActivity.TAG, "NavMenuTitles "+navMenuTitles);    
    
    
            // 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>();
    
    
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
            // Find People
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
            // Photos
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
            // Communities, Will add a counter here
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22"));
            // Pages
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
            // What's hot, We  will add a counter here
            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
    
            Log.d(OrderUpdateConfig.TAG, "Adapter To be called");
            adapter = new NavDrawerListAdapter(getApplicationContext(),
                    navDrawerItems);
            mDrawerList.setAdapter(adapter);
    
            // enabling action bar app icon and behaving it as toggle button
            Log.d(OrderUpdateConfig.TAG, "ActionBar about to be called");
            //getActionBar().setDisplayHomeAsUpEnabled(true);
            //getActionBar().setHomeButtonEnabled(true);
    
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
    
    
    
            Log.d(OrderUpdateConfig.TAG, "ActionBar called and home button enabled");
    
            Log.d(OrderUpdateConfig.TAG, "About to set mDrawerToggle");
            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) {
                    Log.d(OrderUpdateConfig.TAG, "Closing Drawer !!!");
                    getSupportActionBar().setTitle(mTitle);
                    // calling onPrepareOptionsMenu() to show action bar icons
                    invalidateOptionsMenu();
    
                }
    
                public void onDrawerOpened(View drawerView) {
    
                    Log.d(OrderUpdateConfig.TAG, "Opening Drawer !!!");
                    getSupportActionBar().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
                Log.d(OrderUpdateConfig.TAG, "Display View Function to be called for 0th item");
                displayView(1);
            }
        }
    
    
    
    
    
    
        /**
         * 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) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.home, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // 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:
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }
    
    
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
            boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
            menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
            return super.onPrepareOptionsMenu(menu);
        }
    
        @SuppressLint("NewApi")
        @Override
        public void setTitle(CharSequence title) {
            // TODO Auto-generated method stub
            mTitle = title;
            getSupportActionBar().setTitle(mTitle);
        }
    
        @Override
        protected void onPostCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onPostCreate(savedInstanceState);
            mDrawerToggle.syncState();
        }
    
    
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            // TODO Auto-generated method stub
            super.onConfigurationChanged(newConfig);
            mDrawerToggle.onConfigurationChanged(newConfig);
        }
    
        /**
         * Diplaying fragment view for selected nav drawer list item
         * */
        private void displayView(int position) {
            // update the main content by replacing fragments
    
            Log.d(OrderUpdateConfig.TAG, "Display view called");
    
    
            Fragment fragment = null;
            switch (position) {
    
    
            case 0:
    
                Log.d(OrderUpdateConfig.TAG, "Oth element Fragment");
                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) {
    
                Log.d(OrderUpdateConfig.TAG, "Oth element Fragment Manager About to be called");
    
                FragmentManager fragmentManager = getFragmentManager();
                Log.d(OrderUpdateConfig.TAG, "Begin transaction called");
                fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
    
    
                Log.d(OrderUpdateConfig.TAG, "DrawerList Is about to be set");
    
    
                // update selected item and title, then close the drawer
                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);
                Log.d(OrderUpdateConfig.TAG, "Set Title about to be called");
    
                getSupportActionBar().setTitle(navMenuTitles[position]);
    
    
                //setTitle(navMenuTitles[position]);
                Log.d(OrderUpdateConfig.TAG, "DrawerLayout About to be called");
                mDrawerLayout.closeDrawer(mDrawerList);
                Log.d(OrderUpdateConfig.TAG, "DrawerLayout FINISHED");
    
    
            } else {
                // error in creating fragment
                Log.e("MainActivity", "Error in creating fragment");
            }
        }
    }
    

    以上代码的布局文件如下

    <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 to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <!-- Listview to display slider menu -->
    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"       
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background"/>
    

    家庭片段的布局文件在这里

        <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
         <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:divider="@null" />
    
    </LinearLayout>
    

    上述片段的java文件如下: -

        package com.example.orderupdates;
    
    
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import com.android.volley.Cache;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.VolleyLog;
    import com.android.volley.Cache.Entry;
    import com.android.volley.Request.Method;
    import com.android.volley.toolbox.JsonObjectRequest;
    import com.example.adapter.FeedListAdapter;
    import com.example.app.AppController;
    import com.example.config.OrderUpdateConfig;
    import com.example.model.FeedItem;
    
    import android.app.ListFragment;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    
    public class HomeFragment extends ListFragment {
    
    //  String[] AndroidOS = new String[] { "Cupcake","Donut","Eclair","Froyo","Gingerbread","Honeycomb","Ice Cream SandWich","Jelly Bean","KitKat" };
    //  String[] Version = new String[]{"1.5","1.6","2.0-2.1","2.2","2.3","3.0-3.2","4.0","4.1-4.3","4.4"};
    
        private static final String TAG=MainActivity.class.getSimpleName();
        private ListView listView;
        private com.example.adapter.FeedListAdapter listAdapter;
        private List<com.example.model.FeedItem> feedItems;
        private String URL_FEED="http://api.androidhive.info/feed/feed.json";
        private View rootView = null;
    
         public HomeFragment(){}
    
         @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
    
             rootView = inflater.inflate(R.layout.fragment_home, container, false);
             Log.d(OrderUpdateConfig.TAG, "Inside HOME FRAGMENT");
             return rootView;
        }
    
         @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onActivityCreated(savedInstanceState);
            Log.d(OrderUpdateConfig.TAG, "Inside onActivityCreated ");
    
            //ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, AndroidOS);
            //listView = (ListView)getActivity().findViewById(android.R.id.list);
            listView=(ListView) rootView.findViewById(android.R.id.list);
            feedItems = new ArrayList<FeedItem>();
    
            Log.d(OrderUpdateConfig.TAG, "FeedListAdapter to be called");
            listAdapter = new FeedListAdapter((HomeActivity)getActivity(), feedItems);
            listView.setAdapter(listAdapter);
    
            Cache cache = AppController.getInstance().getRequestQueue().getCache();
            Entry entry = cache.get(URL_FEED);
            if (entry != null){
                // fetch the data from cache
                            try {
                                String data = new String(entry.data, "UTF-8");
                                try {
                                    parseJsonFeed(new JSONObject(data));
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                            }
            }else {
    
                // making fresh volley request and getting json
                JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET,
                        URL_FEED, null, new Response.Listener<JSONObject>() {
    
                            @Override
                            public void onResponse(JSONObject response) {
                                VolleyLog.d(TAG, "Response: " + response.toString());
                                if (response != null) {
                                    parseJsonFeed(response);
                                }
                            }
                        }, new Response.ErrorListener() {
    
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                VolleyLog.d(TAG, "Error: " + error.getMessage());
                            }
                        });
    
                // Adding request to volley request queue
                AppController.getInstance().addToRequestQueue(jsonReq);
    
            }
        }
    
         /**
             * Parsing json reponse and passing the data to feed view list adapter
             * */
            private void parseJsonFeed(JSONObject response) {
                try {
                    JSONArray feedArray = response.getJSONArray("feed");
    
                    for (int i = 0; i < feedArray.length(); i++) {
                        JSONObject feedObj = (JSONObject) feedArray.get(i);
    
                        FeedItem item = new FeedItem();
                        item.setId(feedObj.getInt("id"));
                        item.setName(feedObj.getString("name"));
    
                        // Image might be null sometimes
                        String image = feedObj.isNull("image") ? null : feedObj
                                .getString("image");
                        item.setImge(image);
                        item.setStatus(feedObj.getString("status"));
                        item.setProfilePic(feedObj.getString("profilePic"));
                        item.setTimeStamp(feedObj.getString("timeStamp"));
    
                        // url might be null sometimes
                        String feedUrl = feedObj.isNull("url") ? null : feedObj
                                .getString("url");
                        item.setUrl(feedUrl);
    
                        feedItems.add(item);
                    }
    
                    // notify data changes to list adapater
                    listAdapter.notifyDataSetChanged();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    
    
    }
    

0 个答案:

没有答案