私はアンドロイドプロジェクトに取り組んでいます。ここで、アクションバーの検索ビューを実装する必要があります。私は、ボレーを使用して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();
}
}
アダプターフィルターメソッドにいくつかのログを入れ、churchNewsFeedItemssearched – FAT
ええから項目を追加した後にchurhcnewsfeedItemsサイズを調べてください。chruchnewsfeeditemssearchedが空であることをログに記録しましたが、すべてのフィード項目を初期化してアダプターコンストラクター –