Android 为什么不显示我的Listview?
我在android中有一个ListView,并设置了一个自定义适配器。我的问题是,不管适配器和notifyDataSetChanged(),列表视图都不显示任何内容 以下是我的代码:XML:Android 为什么不显示我的Listview?,android,android-listview,Android,Android Listview,我在android中有一个ListView,并设置了一个自定义适配器。我的问题是,不管适配器和notifyDataSetChanged(),列表视图都不显示任何内容 以下是我的代码:XML: <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" androi
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_height="match_parent"
android:layout_width="match_parent">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@null" />
</LinearLayout>
<FrameLayout
android:id="@+id/mainContent"
android:layout_height="match_parent"
android:layout_width="match_parent">
</FrameLayout>
<!-- <TextView
android:id="@+id/empty"
android:text="TextView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:gravity="center"/> -->
<!-- navigation drawer -->
<ListView
android:id="@+id/drawerList"
android:layout_width="240dp"
android:layout_height="match_parent"
android:divider="@null"
android:descendantFocusability="beforeDescendants"
android:listSelector="#FFFFFF"
android:background="#3b5998"
android:layout_gravity="left" />"
</android.support.v4.widget.DrawerLayout>
"));
//使url可点击
setMovementMethod(LinkMovementMethod.getInstance());
holder.url.setVisibility(View.VISIBLE);
}否则{
//url为空,请从视图中删除
holder.url.setVisibility(View.GONE);
}
//用户档案图片
holder.profilePic.setImageUrl(item.getProfilePic(),imageLoader);
//馈送图像
如果(item.getImge()!=null){
holder.feedImageView.setImageUrl(item.getImge(),imageLoader);
holder.feedImageView.setVisibility(View.VISIBLE);
holder.feedImageView
.setResponseObserver(新的FeedImageView.ResponseObserver(){
@凌驾
public void onError(){
}
@凌驾
onSuccess()上的公共void{
}
});
}否则{
holder.feedImageView.setVisibility(View.GONE);
}
返回视图;
}
}
问题是屏幕上没有显示任何内容。我只能看到一个白色屏幕。我看不到所有的文本视图(在适配器中提到)及其文本。显然我做错了什么,但我不知道是什么。最后,我解决了问题 这是更新后的代码。我删除了arrayList.clear和feedItems.clear。它们正在清空我的listview MainActivity.java
package com.sri.vaave;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.android.volley.Cache;
import com.android.volley.Cache.Entry;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonObjectRequest;
import com.sri.vaave.adapter.FeedListAdapter;
import com.sri.vaave.app.AppController;
import com.sri.vaave.data.FeedItem;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private ListView listView;
private FeedListAdapter listAdapter;
private List<FeedItem> feedItems;
private List<FeedItem> arrayTemplist;
private String URL_FEED = "http://coherendz.net/vaavefeed1.json";
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private ArrayList<NavDrawerItem> navDrawerItems;
private TypedArray navMenuIcons;
private NavDrawerListAdapter adapter;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
Iterator itr;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
feedItems = new ArrayList<FeedItem>();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
buildFeed(0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
// These two lines not needed,
// just to get the look of facebook (changing background color & hiding the icon)
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3b5998")));
getActionBar().setIcon(
new ColorDrawable(getResources().getColor(android.R.color.transparent)));
mTitle = mDrawerTitle = getTitle();
navMenuTitles = getResources().getStringArray(R.array.Options);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mDrawerList = (ListView) findViewById(R.id.drawerList);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
// Home
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+"));
// all
navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(6, -1)));
// Recycle the typed array
navMenuIcons.recycle();
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.drawer_open, // nav drawer open - description for accessibility
R.string.drawer_close // 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);
}
private void populateFeedList() {
// TODO Auto-generated method stub
feedItems = getData(0);
//getData(0);
populateListView(feedItems);
}
private void populateListView(List dataFeed) {
// TODO Auto-generated method stub
// feedItems = new ArrayList<FeedItem>();
listAdapter = new FeedListAdapter(this, dataFeed);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(listAdapter);
listAdapter.notifyDataSetChanged();
}
/***
* 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);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
/**
* 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
Toast.makeText(MainActivity.this,navMenuTitles[position]+" was selected", Toast.LENGTH_LONG).show();
setTitle(navMenuTitles[position]);
displayView(position);
mDrawerLayout.closeDrawer(mDrawerList);
}
private void displayView(int position) {
// TODO Auto-generated method stub
feedItems = new ArrayList<FeedItem>();
switch(position){
case 0: try {
buildFeed(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 1: try {
buildFeed(7);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 2: try {
buildFeed(1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 3: try {
buildFeed(13);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 4: try {
buildFeed(12);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
try {
buildFeed(0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
private List getData(int nodeType) {
// TODO Auto-generated method stub
// We first check for cached request
Cache cache = AppController.getInstance().getRequestQueue().getCache();
Entry entry = cache.get(URL_FEED);
String data = null;
if (entry != null) {
// fetch the data from cache
try {
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);
}
return feedItems;
}
/**
* Parsing json reponse and passing the data to feed view list adapter
* */
private void parseJsonFeed(JSONObject response) {
FeedItem item;
itr = response.keys();
try
{
while(itr.hasNext())
{
String key = itr.next().toString();
JSONObject entry = response.getJSONObject(key);
JSONObject phone = entry.getJSONObject("basic");
String name = phone.getString("title");
String description = phone.getString("description");
int nodetype = phone.getInt("node_type");
JSONObject comments = entry.getJSONObject("comments");
String comments_count = comments.getString("count");
JSONObject like = entry.getJSONObject("likes");
String like_count = like.getString("count");
String readable_date = phone.getString("readable_date");
item = new FeedItem();
item.setNode_type(nodetype);
item.setName(String.valueOf(name));
item.setStatus(String.valueOf(description));
item.setReadable_date(String.valueOf(readable_date));
item.setComments_count(String.valueOf(comments_count));
item.setLike_count(String.valueOf(like_count));
feedItems.add(item);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
/**
* 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);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
// 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 onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private void buildFeed(int nodeType) throws JSONException {
// TODO Auto-generated method stub
getData(0);
arrayTemplist = new ArrayList<FeedItem>();
if(nodeType!=0){
for(int x=0;x<feedItems.size();x++)
{
int currentNodeType = feedItems.get(x).getNode_type();
if (nodeType == currentNodeType)
{
arrayTemplist.add(feedItems.get(x));
}
}
feedItems = arrayTemplist;
}
else{
}
populateListView(feedItems);
}
}
package com.sri.vaave;
导入java.io.UnsupportedEncodingException;
导入java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.Activity;
导入android.content.res.Configuration;
导入android.content.res.TypedArray;
导入android.graphics.Color;
导入android.graphics.drawable.ColorDrawable;
导入android.os.Bundle;
导入android.support.v4.app.ActionBarDrawerToggle;
导入android.support.v4.widget.DrawerLayout;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ListView;
导入android.widget.Toast;
导入com.android.volley.Cache;
导入com.android.volley.Cache.Entry;
导入com.android.volley.Request.Method;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.VolleyLog;
导入com.android.volley.toolbox.JsonObjectRequest;
导入com.sri.vaave.adapter.FeedListAdapter;
导入com.sri.vaave.app.AppController;
导入com.sri.vaave.data.FeedItem;
公共类MainActivity扩展了活动{
私有静态最终字符串标记=MainActivity.class.getSimpleName();
私有列表视图列表视图;
专用FeedListAdapter;
私人物品清单;
私有列表arrayTemplist;
专用字符串URL_提要=”http://coherendz.net/vaavefeed1.json";
私人抽屉布局mDrawerLayout;
私有列表视图mDrawerList;
私有操作bardrawertoggle mDrawerToggle;
私人ArrayList NavWrites;
专用型雷达导航仪;
专用导航适配器;
//导航抽屉标题
私有字符序列mDrawerTitle;
//用于存储应用程序标题
私有字符序列mTitle;
//幻灯片菜单项
私有字符串[]navMenuTitles;
迭代器itr;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
feedItems=新的ArrayList();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
试一试{
buildFeed(0);
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
//这两条线不需要,,
//只是为了获得facebook的外观(更改背景颜色并隐藏图标)
getActionBar().setBackgroundDrawable(新的ColorDrawable(Color.parseColor(“#3b5998”));
getActionBar().setIcon(
新的ColorDrawable(getResources().getColor(android.R.color.transparent));
mTitle=mDrawerTitle=getTitle();
NavMenuTiles=getResources().getStringArray(R.array.Options);
//参考资料中的导航抽屉图标
navMenuIcons=getResources()
.obtainTypedArray(R.array.nav_drawer_图标);
mDrawerLayout=(抽屉布局)findViewById(R.id.DroperLayout);
mDrawerList=(ListView)findViewById(R.id.DroperList);
navDrawerItems=新的ArrayList();
//将导航抽屉项添加到阵列
//家
添加(新的NavDrawerItem(navMenuTitles[0],navMenuIcons.getResourceId(0,-1));
//找人
添加(新的NavDrawerItem(navMenuTitles[1],navMenuIcons.getResourceId(1,-1));
//照片
添加(新的NavDrawerItem(navMenuTitles[2],navMenuIcons.getResourceId(2,-1));
//社区,将在此处添加一个计数器
添加(新的NavDrawerItem(navMenuTitles[3],navMenuIcons.getResourceId(3,-1),true,“22”);
//页数
add(新的NavDrawerItem(navMenuTitles[4],navMenuIcons.getResourceId(4,-1));
//什么是热的,我们将在这里加一个计数器
add(新的NavDrawerItem(navMenuTitles[5],navMenuIcons.getResourceId(5,-1),true,“50+”));
//全部
添加新的navDrawerItems(navMenuTitles[6
package com.sri.vaave.adapter;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.sri.vaave.FeedImageView;
import com.sri.vaave.R;
import com.sri.vaave.app.AppController;
import com.sri.vaave.data.FeedItem;
public class FeedListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<FeedItem> feedItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
this.activity = activity;
this.feedItems = feedItems;
}
@Override
public int getCount() {
return feedItems.size();
}
@Override
public Object getItem(int location) {
return feedItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
class MyViewHolder{
TextView name,timestamp,statusMsg,url;
NetworkImageView profilePic;
FeedImageView feedImageView;
@SuppressWarnings("unused")
MyViewHolder(View v){
TextView name = (TextView) v.findViewById(R.id.name);
TextView timestamp = (TextView) v
.findViewById(R.id.timestamp);
TextView statusMsg = (TextView) v
.findViewById(R.id.txtStatusMsg);
TextView url = (TextView)v.findViewById(R.id.txtUrl);
NetworkImageView profilePic = (NetworkImageView) v
.findViewById(R.id.profilePic);
FeedImageView feedImageView = (FeedImageView) v
.findViewById(R.id.feedImage1);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder holder = null;
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
{
convertView = inflater.inflate(R.layout.feed_item, null);
holder = new MyViewHolder(convertView);
convertView.setTag(holder);
}
else
{
holder = (MyViewHolder) convertView.getTag();
}
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
FeedItem item = feedItems.get(position);
holder.name.setText(item.getName());
// Converting timestamp into x ago format
/*CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
Long.parseLong(item.getReadable_date()),
System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);*/
holder.timestamp.setText(item.getReadable_date());
// Chcek for empty status message
if (!TextUtils.isEmpty(item.getStatus())) {
holder.statusMsg.setText(Html.fromHtml(item.getStatus()));
holder.statusMsg.setVisibility(View.VISIBLE);
} else {
// status is empty, remove from view
holder.statusMsg.setVisibility(View.GONE);
}
// Checking for null feed url
if (item.getUrl() != null) {
holder.url.setText(Html.fromHtml("<a href=\"" + item.getUrl() + "\">"
+ item.getUrl() + "</a> "));
// Making url clickable
holder.url.setMovementMethod(LinkMovementMethod.getInstance());
holder.url.setVisibility(View.VISIBLE);
} else {
// url is null, remove from the view
holder.url.setVisibility(View.GONE);
}
// user profile pic
holder.profilePic.setImageUrl(item.getProfilePic(), imageLoader);
// Feed image
if (item.getImge() != null) {
holder.feedImageView.setImageUrl(item.getImge(), imageLoader);
holder.feedImageView.setVisibility(View.VISIBLE);
holder.feedImageView
.setResponseObserver(new FeedImageView.ResponseObserver() {
@Override
public void onError() {
}
@Override
public void onSuccess() {
}
});
} else {
holder.feedImageView.setVisibility(View.GONE);
}
return convertView;
}
}
package com.sri.vaave;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.android.volley.Cache;
import com.android.volley.Cache.Entry;
import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonObjectRequest;
import com.sri.vaave.adapter.FeedListAdapter;
import com.sri.vaave.app.AppController;
import com.sri.vaave.data.FeedItem;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private ListView listView;
private FeedListAdapter listAdapter;
private List<FeedItem> feedItems;
private List<FeedItem> arrayTemplist;
private String URL_FEED = "http://coherendz.net/vaavefeed1.json";
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private ArrayList<NavDrawerItem> navDrawerItems;
private TypedArray navMenuIcons;
private NavDrawerListAdapter adapter;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
Iterator itr;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
feedItems = new ArrayList<FeedItem>();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
buildFeed(0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
// These two lines not needed,
// just to get the look of facebook (changing background color & hiding the icon)
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3b5998")));
getActionBar().setIcon(
new ColorDrawable(getResources().getColor(android.R.color.transparent)));
mTitle = mDrawerTitle = getTitle();
navMenuTitles = getResources().getStringArray(R.array.Options);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mDrawerList = (ListView) findViewById(R.id.drawerList);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
// Home
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+"));
// all
navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(6, -1)));
// Recycle the typed array
navMenuIcons.recycle();
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.drawer_open, // nav drawer open - description for accessibility
R.string.drawer_close // 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);
}
private void populateFeedList() {
// TODO Auto-generated method stub
feedItems = getData(0);
//getData(0);
populateListView(feedItems);
}
private void populateListView(List dataFeed) {
// TODO Auto-generated method stub
// feedItems = new ArrayList<FeedItem>();
listAdapter = new FeedListAdapter(this, dataFeed);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(listAdapter);
listAdapter.notifyDataSetChanged();
}
/***
* 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);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
/**
* 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
Toast.makeText(MainActivity.this,navMenuTitles[position]+" was selected", Toast.LENGTH_LONG).show();
setTitle(navMenuTitles[position]);
displayView(position);
mDrawerLayout.closeDrawer(mDrawerList);
}
private void displayView(int position) {
// TODO Auto-generated method stub
feedItems = new ArrayList<FeedItem>();
switch(position){
case 0: try {
buildFeed(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 1: try {
buildFeed(7);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 2: try {
buildFeed(1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 3: try {
buildFeed(13);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 4: try {
buildFeed(12);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
try {
buildFeed(0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
private List getData(int nodeType) {
// TODO Auto-generated method stub
// We first check for cached request
Cache cache = AppController.getInstance().getRequestQueue().getCache();
Entry entry = cache.get(URL_FEED);
String data = null;
if (entry != null) {
// fetch the data from cache
try {
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);
}
return feedItems;
}
/**
* Parsing json reponse and passing the data to feed view list adapter
* */
private void parseJsonFeed(JSONObject response) {
FeedItem item;
itr = response.keys();
try
{
while(itr.hasNext())
{
String key = itr.next().toString();
JSONObject entry = response.getJSONObject(key);
JSONObject phone = entry.getJSONObject("basic");
String name = phone.getString("title");
String description = phone.getString("description");
int nodetype = phone.getInt("node_type");
JSONObject comments = entry.getJSONObject("comments");
String comments_count = comments.getString("count");
JSONObject like = entry.getJSONObject("likes");
String like_count = like.getString("count");
String readable_date = phone.getString("readable_date");
item = new FeedItem();
item.setNode_type(nodetype);
item.setName(String.valueOf(name));
item.setStatus(String.valueOf(description));
item.setReadable_date(String.valueOf(readable_date));
item.setComments_count(String.valueOf(comments_count));
item.setLike_count(String.valueOf(like_count));
feedItems.add(item);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
/**
* 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);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
// 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 onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private void buildFeed(int nodeType) throws JSONException {
// TODO Auto-generated method stub
getData(0);
arrayTemplist = new ArrayList<FeedItem>();
if(nodeType!=0){
for(int x=0;x<feedItems.size();x++)
{
int currentNodeType = feedItems.get(x).getNode_type();
if (nodeType == currentNodeType)
{
arrayTemplist.add(feedItems.get(x));
}
}
feedItems = arrayTemplist;
}
else{
}
populateListView(feedItems);
}
}