2017-06-04 3 views
0

私はアンドロイドプロジェクトに取り組んでいます。ここで、アクションバーの検索ビューを実装する必要があります。私は、ボレーを使用してJSONデータをリサイクラビューに解析できます。検索ビューを追加しようとすると、そのテキストの入力を開始するとリストが消えてしまいます。volley JSON androidを使用してSearchViewを実装する方法は?

活動:

public class Fragment_Church_News extends AppCompatActivity { 


    private static final String TAG = MainActivity.class.getSimpleName(); 
    private ListView listView; 
    Context con; 
    private ChurchNewsFeedListAdapter listAdapter; 
    private List<ChurchNewsFeedItem> feedItemschurchnews; 

    int a = Keys.LANGUGAE_KEY; 


    public Fragment_Church_News() { 
     // Required empty public constructor 
    } 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment_church_list); 

     con = this; 

     if(Keys.LANGUGAE_KEY == 0) 
     { 
      a = 2; 

     } 
     else 
     { 

      a=1; 
     } 

     Toast.makeText(this, "aaaaaaa"+a+"", Toast.LENGTH_SHORT).show(); 
     listView = (ListView) findViewById(R.id.list); 

     feedItemschurchnews = new ArrayList<ChurchNewsFeedItem>(); 

     listAdapter = new ChurchNewsFeedListAdapter(this, feedItemschurchnews,con); 
     listView.setAdapter(listAdapter); 

     Toast.makeText(this, "a", Toast.LENGTH_SHORT).show(); 

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


       TextView c = (TextView) view.findViewById(R.id.news_details); 
       String idfromtextview = c.getText().toString().trim(); 


       Intent testIntent = new Intent(Fragment_Church_News.this, MainColapse.class); 
       testIntent.putExtra("txtpersonid", idfromtextview); 
       startActivity(testIntent); 
      } 
     }); 


     ///// 


     // We first check for cached request 
     Cache cache = AppController.getInstance().getRequestQueue().getCache(); 
     Cache.Entry entry = cache.get("http://52.89.46.93/churchListAppDump/?methodName=church.list&app_language_name="+a+""); 
     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(Request.Method.GET, 
        "http://52.89.46.93/churchListAppDump/?methodName=church.list&app_language_name="+a+"", 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) { 
       } 
      }); 

      // Adding request to volley request queue 
      AppController.getInstance().addToRequestQueue(jsonReq); 
     } 


    } 

    private void parseJsonFeed(JSONObject response) { 
     try { 
      JSONArray feedArray = response.getJSONArray("responseMsg"); 


      for (int i = 0; i < feedArray.length(); i++) { 
       JSONObject feedObj = (JSONObject) feedArray.get(i); 

       ChurchNewsFeedItem item = new ChurchNewsFeedItem(); 
       item.setNews_title(feedObj.getString("church_name")); 

       String image = feedObj.isNull("church_image") ? null : feedObj 
         .getString("church_image"); 
       item.setNews_image(image); 
       item.setNews_details(feedObj.getString("admin_id")); 

       // String priya = feedObj.getString("admin_id"); 

       feedItemschurchnews.add(item); 
      } 

      // notify data changes to list adapater 
      listAdapter.notifyDataSetChanged(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void deleteCache(Context context) { 
     try { 
      File dir = context.getCacheDir(); 
      deleteDir(dir); 
     } catch (Exception e) { 
     } 
    } 

    public static boolean deleteDir(File dir) { 
     if (dir != null && dir.isDirectory()) { 
      String[] children = dir.list(); 
      for (int i = 0; i < children.length; i++) { 
       boolean success = deleteDir(new File(dir, children[i])); 
       if (!success) { 
        return false; 
       } 
      } 
      return dir.delete(); 
     } else if (dir != null && dir.isFile()) { 
      return dir.delete(); 
     } else { 
      return false; 

     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     //getMenuInflater().inflate(R.menu.menu_search, menu); 
     MenuInflater inflater = getMenuInflater(); 
     // Inflate menu to add items to action bar if it is present. 
     inflater.inflate(R.menu.search_main, menu); 

     SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
     search.setSearchableInfo(manager.getSearchableInfo(getComponentName())); 
     search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       PerfromSearch(newText); 
       return false; 
      } 
     }); 
     return true; 
    } 

    void PerfromSearch(String query) { 

     listAdapter.filter(query); 
    } 


} 

は、アダプタ:

public class ChurchNewsFeedListAdapter extends BaseAdapter 
{ 

    private Activity activity; 
    private LayoutInflater inflater; 
    Context mContext; 
    private List<ChurchNewsFeedItem> churhcnewsfeedItems, churchNewsFeedItemssearched=null; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

    //List<ChurchNewsFeedItem> arraylist; 

    public ChurchNewsFeedListAdapter(Activity activity, List<ChurchNewsFeedItem> feedItems,Context context) { 
     this.activity = activity; 
     this.churhcnewsfeedItems = feedItems; 

     this.churchNewsFeedItemssearched = new ArrayList<ChurchNewsFeedItem>(); 
     this.churchNewsFeedItemssearched.addAll(feedItems); 

     // mContext = this; 
     this.mContext = context; 


    } 

    @Override 
    public int getCount() { 
     return churhcnewsfeedItems.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return churhcnewsfeedItems.get(location); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) 
      convertView = inflater.inflate(R.layout.churchnews_feed_item, null); 

     if (imageLoader == null) 
      imageLoader = AppController.getInstance().getImageLoader(); 

     TextView newstitle = (TextView) convertView.findViewById(R.id.news_title); 

     TextView newdetails = (TextView) convertView 
       .findViewById(R.id.news_details); 

     ChurchNewsFeedImageView feedImageView = (ChurchNewsFeedImageView) convertView 
       .findViewById(R.id.news_feedImage); 

     ChurchNewsFeedItem item = churhcnewsfeedItems.get(position); 

     newstitle.setText(item.getNews_title()); 



     // Chcek for empty status message 
     if (!TextUtils.isEmpty(item.getNews_details())) { 
      newdetails.setText(item.getNews_details()); 
      newdetails.setVisibility(View.VISIBLE); 
     } else { 
      // status is empty, remove from view 
      newdetails.setVisibility(View.GONE); 
     } 


     // Feed image 
     if (item.getNews_image() != null) { 
      feedImageView.setImageUrl(item.getNews_image(), imageLoader); 
      feedImageView.setVisibility(View.VISIBLE); 
      feedImageView 
        .setResponseObserver(new ChurchNewsFeedImageView.ResponseObserver() { 
         @Override 
         public void onError() 
         { 


         } 

         @Override 
         public void onSuccess() { 


         } 
        }); 
     } else { 
      feedImageView.setVisibility(View.GONE); 
     } 

     return convertView; 
    } 




    public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 

     Toast.makeText(mContext, "divakar"+churchNewsFeedItemssearched, Toast.LENGTH_SHORT).show(); 
     churhcnewsfeedItems.clear(); 
     if (charText.length() == 0) { 
      churhcnewsfeedItems.addAll(churchNewsFeedItemssearched); 

     } else { 

      for (ChurchNewsFeedItem wp : churchNewsFeedItemssearched) { 
       if (wp.getNews_title().toLowerCase(Locale.getDefault()) 
         .contains(charText)) { 
        churhcnewsfeedItems.add(wp); 

       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 
} 
+0

アダプターフィルターメソッドにいくつかのログを入れ、churchNewsFeedItemssearched – FAT

+0

ええから項目を追加した後にchurhcnewsfeedItemsサイズを調べてください。chruchnewsfeeditemssearchedが空であることをログに記録しましたが、すべてのフィード項目を初期化してアダプターコンストラクター –

答えて

1

あなたchurchNewsFeedItemssearchedリストがNULLあるようです。あなたはfeedItemschurchnews0とアイテム渡しているChurchNewsFeedListAdapter初期化するときので:このため、だから、

listAdapter = new ChurchNewsFeedListAdapter(this, feedItemschurchnews, con); 

をお使いのアダプタのコンストラクタは以下のように動作します:

public ChurchNewsFeedListAdapter(Activity activity, List<ChurchNewsFeedItem> feedItems,Context context) { 
    this.activity = activity; 
    this.churhcnewsfeedItems = feedItems; // SIZE 0 

    this.churchNewsFeedItemssearched = new ArrayList<ChurchNewsFeedItem>(); 
    this.churchNewsFeedItemssearched.addAll(feedItems); // SIZE 0 
} 

SOLUTION:あなたが更新する必要が

リストchurchNewsFeedItemssearched

churchNewsFeedItemssearchedを更新しfeedItemschurchnewsにすべての項目を追加した後にparseJsonFeed()からこのメソッドを呼び出すためにあなたのChurchNewsFeedListAdapterクラスにメソッドupdateSearchedList()を追加します。

は、以下のようにコードを更新します。これは動作します

ChurchNewsFeedListAdapter:

public void updateSearchedList() { 

    churchNewsFeedItemssearched.addAll(churhcnewsfeedItems); 
} 

Fragment_Church_News:

private void parseJsonFeed(JSONObject response) { 

    try { 
     JSONArray feedArray = response.getJSONArray("responseMsg"); 

     for (int i = 0; i < feedArray.length(); i++) { 
      JSONObject feedObj = (JSONObject) feedArray.get(i); 

      ChurchNewsFeedItem item = new ChurchNewsFeedItem(); 
      item.setNews_title(feedObj.getString("church_name")); 

      String image = feedObj.isNull("church_image") ? null : feedObj 
        .getString("church_image"); 
      item.setNews_image(image); 
      item.setNews_details(feedObj.getString("admin_id")); 

      // String priya = feedObj.getString("admin_id"); 

      feedItemschurchnews.add(item); 
     } 

     // Update 
     listAdapter.updateSearchedList(); 

     // notify data changes to list adapater 
     listAdapter.notifyDataSetChanged(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

希望を〜

+0

ありがとうございました。コードはうまくいきました。 –

+0

大歓迎です:) – FAT

関連する問題