Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-返回时显示空列表视图_Java_Android_Android Listview_Simplecursoradapter_Textwatcher - Fatal编程技术网

Java Android-返回时显示空列表视图

Java Android-返回时显示空列表视图,java,android,android-listview,simplecursoradapter,textwatcher,Java,Android,Android Listview,Simplecursoradapter,Textwatcher,我正在通过ContentProvider和SimpleCursorAdapter加载ListView。我添加了一个TextWatcher来过滤结果。这很好,但是在我点击一个ListItem加载另一个片段之后,当我回击时,我得到一个空的ListView。知道为什么会这样吗 import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Progress

我正在通过ContentProvider和SimpleCursorAdapter加载ListView。我添加了一个TextWatcher来过滤结果。这很好,但是在我点击一个ListItem加载另一个片段之后,当我回击时,我得到一个空的ListView。知道为什么会这样吗

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.text.Editable;
import android.text.Html;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import com.actionbarsherlock.app.SherlockListFragment;
import com.brndwgn.RequestHelper.GetResponse;
import com.brndwgn.database.BlogContentProvider;
import com.brndwgn.database.BlogTable;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

public class NewsFragment extends SherlockListFragment implements LoaderCallbacks<Cursor> {

    public boolean isNetworkAvailable() {

        ConnectivityManager connectivityManager = (ConnectivityManager) parent.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();

        return activeNetworkInfo != null;

    }   

    private SimpleCursorAdapter adapter;

    private boolean dataRetrieved;

    private SlidingArea parent;

    PullToRefreshListView pullToRefreshView;

    EditText searchBox;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        parent = (SlidingArea) getActivity();

        setHasOptionsMenu(true);    

        parent.getSupportActionBar().setCustomView(R.layout.actionbar_news_list);
        parent.getSupportActionBar().setDisplayShowCustomEnabled(true);
        parent.getSupportActionBar().setDisplayShowTitleEnabled(false);
        parent.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        final ImageView searchButton = (ImageView) parent.findViewById(R.id.image_search_list);

        searchButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                searchBox.setVisibility(View.VISIBLE);            }

        });

        final ImageView refreshButton = (ImageView) parent.findViewById(R.id.image_refresh_list);

        refreshButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                getData(getString(R.string.json_get_posts_url), true);
                refreshButton.setImageResource(R.drawable.menu_refresh_dark);
                fillData();
            }

        });
    }

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

        View V = inflater.inflate(R.layout.fragment_news, null);
        pullToRefreshView = (PullToRefreshListView) V.findViewById(R.id.pull_to_refresh_listview);
        searchBox = (EditText)V.findViewById(R.id.edittext_search);

        return V;
    }



    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        pullToRefreshView.setOnRefreshListener(new OnRefreshListener<ListView>() {

            @Override
            public void onRefresh(PullToRefreshBase<ListView> refreshView) {
                // Do work to refresh the list here.
                getData(getString(R.string.json_get_posts_url), false);
            }

        });

    }

    @Override
    public void onResume() {
        super.onResume();

        fillData();

        parent.getSupportActionBar().setCustomView(R.layout.actionbar_news_list);
        parent.getSupportActionBar().setDisplayShowCustomEnabled(true);
        parent.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        final ImageView searchButton = (ImageView) parent.findViewById(R.id.image_search_list);

        searchButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                searchBox.setVisibility(View.VISIBLE);            
            }

        });


        final ImageView refreshButton = (ImageView) parent.findViewById(R.id.image_refresh_list);

        refreshButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                getData(getString(R.string.json_get_posts_url), true);
                refreshButton.setImageResource(R.drawable.menu_refresh_dark);
                fillData();
            }

        }); 

        adapter.setFilterQueryProvider(new FilterQueryProvider() {

            public Cursor runQuery(CharSequence constraint) {

                String[] projection = new String[] { BlogTable.TITLE_PLAIN, BlogTable.DATE_MODIFIED, BlogTable.EXCERPT, BlogTable.ID };  
                return parent.getContentResolver().query(BlogContentProvider.CONTENT_URI, projection, BlogTable.TITLE_PLAIN  + " LIKE '%"+constraint+"%'", null, BlogTable.DATE_MODIFIED + " DESC");

          }

        }); 

        searchBox.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text

                adapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });
    }

    //Constant used as key for ID being passed in the bundle between fragments 
    public static final String NEWS_ID = "newsID";

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


        Bundle detailBundle = new Bundle();
        detailBundle.putLong(NEWS_ID, id);

        FragmentTransaction ft = parent.getSupportFragmentManager().beginTransaction();

        //Instance must be created here to setArguments rather then in the replace() method
        NewsDetailFragment newsDetailFragment = new NewsDetailFragment();
        newsDetailFragment.setArguments(detailBundle);

        ft.replace(R.id.content_frame, newsDetailFragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(null);
        ft.commit();

    }    

    private void getData(String url, boolean showProgressDialog) {
        new Request(showProgressDialog).execute(new String[] {url});    
    }

    public class Request extends AsyncTask<String, Void, String> {

        ProgressDialog dialog;

        /* This is the only file that needs to be edited */

        private GetResponse response = null;

        private boolean showProgressDialog = true;

        public Request(boolean showProgressDialog)
        {
            super();
            this.showProgressDialog = showProgressDialog;
            response = new GetResponse();
        }   

        @Override
        protected void onPreExecute() {

            if (showProgressDialog) {
                dialog = new ProgressDialog(parent);
                dialog.setMessage("Loading stuff to read...");
                dialog.setIndeterminate(true);
                dialog.setCancelable(false);
                dialog.show();
            }
        }

        //This method must return the type specified in the constructor
        @Override
        protected String doInBackground(String... url) {
            response.setUrl(url[0]);

            String res = response.execute();

            // When it returns the "res" it will call onPostExecute
            return res;
        }

        @Override
        protected void onPostExecute(String result) {

            // Here we have response from server
            if ( isNetworkAvailable() ){

                try {

                    JSONObject json = new JSONObject(result);
                    JSONArray arr = json.getJSONArray("posts");

                    for (int i = arr.length() - 1; i >= 0; --i) {
                        JSONObject row = arr.getJSONObject(i);

                        if (row.getString("type").equals("post")) {

                            if (row.getString("status").equals("publish")) {

                                ContentValues values = new ContentValues();
                                values.put(BlogTable.POST_ID, row.getString("id"));
                                values.put(BlogTable.URL, row.getString(BlogTable.URL));
                                values.put(BlogTable.TITLE, row.getString(BlogTable.TITLE));
                                values.put(BlogTable.TITLE_PLAIN, Html.fromHtml(row.getString(BlogTable.TITLE_PLAIN)).toString());
                                values.put(BlogTable.CONTENT, row.getString(BlogTable.CONTENT));
                                values.put(BlogTable.EXCERPT, Html.fromHtml(row.getString(BlogTable.EXCERPT)).toString());
                                values.put(BlogTable.DATE, row.getString(BlogTable.DATE));
                                values.put(BlogTable.DATE_MODIFIED, row.getString(BlogTable.DATE_MODIFIED));

                                //getAuthorID
                                JSONObject objAuthor = row.getJSONObject("author");
                                values.put(BlogTable.AUTHOR_ID, objAuthor.getInt("id"));

                                //Check to insert new author

                                //getThumbnail
                                byte[] image = AppHelper.getBlobFromURL(row.getString(BlogTable.THUMBNAIL));
                                if (image != null) {

                                    values.put(BlogTable.DATE_MODIFIED, image);

                                }

                                //isFavourite
                                values.put(BlogTable.IS_FAVOURITE, 0);

                                // when this is called here it is referring to the activity
                                parent.getContentResolver().insert(BlogContentProvider.CONTENT_URI, values);    

                                dataRetrieved = true;

                            }
                            else {

                                String currentID = row.getString("id");

                                // Delete unpublished fields
                                parent.getContentResolver().delete(BlogContentProvider.CONTENT_URI, "_id = " + currentID, null);

                            }
                        }
                    }
                } catch (JSONException e) {

                    e.printStackTrace();

                }
            }
            else {

                Toast toast = Toast.makeText( parent , "Oops! There is no connection to the Internet", Toast.LENGTH_SHORT);
                toast.show();

            }           

            // Call onRefreshComplete when the list has been refreshed.
            pullToRefreshView.onRefreshComplete();
            super.onPostExecute(result);

            ImageView refreshButton = (ImageView) parent.findViewById(R.id.image_refresh_list);
            refreshButton.setImageResource(R.drawable.menu_refresh);

            if (showProgressDialog) {
                dialog.dismiss();   
            }
        }

    }

    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {

        String[] projection = new String[] { BlogTable.TITLE_PLAIN, BlogTable.DATE_MODIFIED, BlogTable.EXCERPT, BlogTable.ID };

        CursorLoader loader = new CursorLoader(parent, BlogContentProvider.CONTENT_URI, projection, null, null, BlogTable.DATE_MODIFIED + " DESC");

        return loader;
    }

    private void fillData(){

        //_id is expected from this method that is why we used it earlier
        String[] from = new String[] { BlogTable.TITLE_PLAIN, BlogTable.DATE_MODIFIED, BlogTable.EXCERPT};
        int[] to = new int[] { R.id.text_news_title, R.id.text_news_date, R.id.text_news_excerpt};

        //initialize loader to call this class with a callback
        getLoaderManager().initLoader(0, null, this);

        //We create adapter to fill list with data, but we don't provide any data as it will be done by loader
        adapter = new SimpleCursorAdapter(parent, R.layout.news_list_view, null, from, to, 0);

        setListAdapter(adapter);
    }

    public void onLoadFinished(Loader<Cursor> arg0, Cursor data) {
        adapter.swapCursor(data);

    }

    public void onLoaderReset(Loader<Cursor> arg0) {
        adapter.swapCursor(null);       
    }
}
import org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.ProgressDialog;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.net.ConnectivityManager;
导入android.net.NetworkInfo;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.FragmentTransaction;
导入android.support.v4.app.LoaderManager.LoaderCallbacks;
导入android.support.v4.content.CursorLoader;
导入android.support.v4.content.Loader;
导入android.support.v4.widget.SimpleCursorAdapter;
导入android.text.Editable;
导入android.text.Html;
导入android.text.TextWatcher;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.EditText;
导入android.widget.FilterQueryProvider;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.Toast;
导入com.actionbarsherlock.app.SherlockListFragment;
导入com.brndwgn.RequestHelper.GetResponse;
导入com.brndwgn.database.BlogContentProvider;
导入com.brndwgn.database.BlogTable;
导入com.mandrk.pulltorefresh.library.pulltorefresh库;
导入com.mandrk.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
导入com.mandrk.pulltorefresh.library.pulltorefresh列表视图;
公共类NewsFragment扩展SherlockListFragment实现LoaderCallbacks{
公共布尔值isNetworkAvailable(){
ConnectivityManager ConnectivityManager=(ConnectivityManager)parent.getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
返回activeNetworkInfo!=null;
}   
专用SimpleCursorAdapter适配器;
检索到私有布尔数据;
私人滑翔区家长;
PullToRefreshListView pullToRefreshView;
编辑文本搜索框;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
父项=(滑动区域)getActivity();
设置选项菜单(真);
parent.getSupportActionBar().setCustomView(R.layout.actionbar\u新闻\u列表);
parent.getSupportActionBar().setDisplayShowCustomEnabled(true);
parent.getSupportActionBar().setDisplayShowTitleEnabled(false);
parent.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
最终ImageView搜索按钮=(ImageView)parent.findViewById(R.id.image\u搜索列表);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
searchBox.setVisibility(View.VISIBLE);}
});
最终ImageView刷新按钮=(ImageView)parent.findViewById(R.id.image\u刷新\u列表);
refreshButton.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
getData(getString(R.string.json\u get\u posts\u url),true);
refreshButton.setImageResource(R.drawable.menu\u refresh\u dark);
fillData();
}
});
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图V=充气机。充气(R.layout.fragment_news,null);
pullToRefreshView=(PullToRefreshListView)V.findViewById(R.id.pull\u to\u refresh\u listview);
searchBox=(EditText)V.findViewById(R.id.EditText\u search);
返回V;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onActivityCreated(savedInstanceState);
pullToRefreshView.setOnRefreshListener(新的OnRefreshListener(){
@凌驾
公共void onRefresh(PullToRefreshBase refreshView){
//请务必刷新此处的列表。
getData(getString(R.string.json\u get\u posts\u url),false);
}
});
}
@凌驾
恢复时公开作废(){
super.onResume();
fillData();
parent.getSupportActionBar().setCustomView(R.layout.actionbar\u新闻\u列表);
parent.getSupportActionBar().setDisplayShowCustomEnabled(true);
parent.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
最终ImageView搜索按钮=(ImageView)parent.findViewById(R.id.image\u搜索列表);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
searchBox.setVisibility(View.VISIBLE);
}
});
最终ImageView刷新按钮=(ImageView)parent.findViewById(R.id.image\u刷新\u列表);
refreshButton.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
getData(getString(R.string.json\u get\u posts\u url),true);
refreshButton.setImageResource(R.drawable.menu\u refresh\u dark);
fillData();
}
}); 
setFilterQueryProvider(新的FilterQueryProvider(){
公共游标运行查询(CharSequence约束){
String[]projection=新字符串[]{BlogTable.TITLE_PLAIN,BlogTable.DATE_MODIFIED,BlogTable.extract,BlogTable.ID};
返回parent.getContentResolver().query(BlogContentProvider.CONTENT\u URI,投影,BlogTable.TITLE\u PLAIN+“类似“%”+约束+“%”,null,BlogTable.DATE\u MODIFIED+“DESC”);
}
}); 
searchBox.addTextChangedListener(新文本)