Java GridView Android上的搜索功能
我一直在学习这个教程 成功了。我试图在自己的活动中实现它,并从服务器获取数据 当我在搜索字段中键入时,网格视图将变为空。这就像自定义适配器上的列表变为空一样 我的活动课Java GridView Android上的搜索功能,java,android,gridview,Java,Android,Gridview,我一直在学习这个教程 成功了。我试图在自己的活动中实现它,并从服务器获取数据 当我在搜索字段中键入时,网格视图将变为空。这就像自定义适配器上的列表变为空一样 我的活动课 package com.danz.tensai.catalog; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; im
package com.danz.tensai.catalog;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.danz.tensai.catalog.app.MyApplication;
import com.danz.tensai.catalog.helper.Product;
import com.danz.tensai.catalog.helper.SwipeListAdapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class MainActivity extends ActionBarActivity {
private String TAG = MainActivity.class.getSimpleName();
private String URL_TOP_250 = "http://danztensai.hostoi.com/imdb_top_250.php?offset=";
private SwipeRefreshLayout swipeRefreshLayout;
//private ListView listView;
private GridView gridView;
private SwipeListAdapter adapter;
private List<Product> productList;
private ProgressBar spinner;
EditText editsearch;
private int offSet = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView)findViewById(R.id.gridViewListProduct);
productList = new ArrayList<>();
fetchProduct();
adapter = new SwipeListAdapter(this, productList);
gridView.setAdapter(adapter);
editsearch = (EditText)findViewById(R.id.search);
editsearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
String text = editsearch.getText().toString().toLowerCase(Locale.getDefault());
Log.d(TAG,"Text To Search : "+text);
adapter.filter(text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void fetchProduct() {
spinner = (ProgressBar)findViewById(R.id.progressBar1);
// appending offset to url
String url = URL_TOP_250 + offSet;
// Volley's json array request object
JsonArrayRequest req = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
if (response.length() > 0) {
// looping through json and adding to movies list
for (int i = 0; i < response.length(); i++) {
try {
JSONObject movieObj = response.getJSONObject(i);
int rank = movieObj.getInt("rank");
String title = movieObj.getString("title");
String imageURL = movieObj.getString("imageURL");
Product m = new Product(rank, title,imageURL);
productList.add(0, m);
// updating offset value to highest value
if (rank >= offSet)
offSet = rank;
} catch (JSONException e) {
Log.e(TAG, "JSON Parsing error: " + e.getMessage());
}
}
// adapter.notifyDataSetChanged();
}
// stopping swipe refresh
// swipeRefreshLayout.setRefreshing(false);
spinner.setVisibility(View.GONE);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Server Error: " + error.getMessage());
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
// stopping swipe refresh
// swipeRefreshLayout.setRefreshing(false);
spinner.setVisibility(View.GONE);
}
});
// Adding request to request queue
Log.e(TAG,req.toString() );
MyApplication.getInstance().addToRequestQueue(req);
}
}
package com.danz.tensai.catalog;
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入android.support.v4.widget.swiperFreshLayout;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.GridView;
导入android.widget.ProgressBar;
导入android.widget.Toast;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.JsonArrayRequest;
导入com.danz.tensai.catalog.app.MyApplication;
导入com.danz.tensai.catalog.helper.Product;
导入com.danz.tensai.catalog.helper.SwipeListAdapter;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Locale;
公共类MainActivity扩展了ActionBarActivity{
私有字符串标记=MainActivity.class.getSimpleName();
私有字符串URL_TOP_250=”http://danztensai.hostoi.com/imdb_top_250.php?offset=";
私人SwipeRefreshLayout SwipeRefreshLayout;
//私有列表视图列表视图;
私有GridView GridView;
专用SwipeListAdapter适配器;
私有列表产品列表;
私人旋转棒;
编辑文本编辑搜索;
私有整数偏移=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView=(gridView)findViewById(R.id.gridViewListProduct);
productList=新的ArrayList();
fetchProduct();
适配器=新SwipeListAdapter(此,productList);
setAdapter(适配器);
editsearch=(EditText)findViewById(R.id.search);
editsearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
String text=editsearch.getText().toString().toLowerCase(Locale.getDefault());
Log.d(标记“要搜索的文本:”+文本);
过滤器(文本);
}
@凌驾
更改前的公共无效(字符序列arg0,int arg1,
整数arg2,整数arg3){
//TODO自动生成的方法存根
}
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
私有产品(){
微调器=(ProgressBar)findViewById(R.id.progressBar1);
//将偏移量追加到url
字符串url=url\u TOP\u 250+偏移量;
//Volley的json数组请求对象
JsonArrayRequest req=新的JsonArrayRequest(url,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(TAG,response.toString());
if(response.length()>0){
//循环使用json并添加到电影列表
对于(int i=0;i=偏移)
偏移量=秩;
}捕获(JSONException e){
Log.e(标记“JSON解析错误:”+e.getMessage());
}
}
//adapter.notifyDataSetChanged();
}
//停止刷卡刷新
//swipeRefreshLayout.setRefreshing(false);
spinner.setVisibility(View.GONE);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(标记“服务器错误:+Error.getMessage());
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG.show();
//停止刷卡刷新
//swipeRefreshLayout.setRefreshing(false);
public class SwipeListAdapter extends BaseAdapter {
private Activity activity;
LayoutInflater inflater;
Context mContext;
private List<Product> productList;
private ArrayList<Product> arraylist;
private String TAG = SwipeListAdapter.class.getSimpleName();
//private String[] bgColors;
public SwipeListAdapter(Context context, List<Product> productList) {
//this.activity = activity;
mContext = context;
this.productList = productList;
inflater = LayoutInflater.from(mContext);
this.arraylist = new ArrayList<Product>();
this.arraylist.addAll(productList);
// bgColors = activity.getApplicationContext().getResources().getStringArray(R.array.movie_serial_bg);
}
public class ViewHolder{
ImageView productImage;
}
@Override
public int getCount() {
return productList.size();
}
@Override
public Object getItem(int location) {
return productList.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_row,null);
holder.productImage = (ImageView) convertView.findViewById(R.id.productImage);
convertView.setTag(holder);
}else
{
holder
= (ViewHolder) convertView.getTag();
}
new DownloadImageTask((holder.productImage))
.execute(productList.get(position).imageURL);
return convertView;
}
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
productList.clear();
if (charText.length() == 0) {
productList.addAll(arraylist);
} else {
for (Product wp : arraylist) {
if (wp.getTitle().toLowerCase(Locale.getDefault())
.contains(charText)) {
productList.add(wp);
}
}
}
notifyDataSetChanged();
}
}
//In the SwipeListAdapter class add
public void add(Product p) {
productList.add(0, p);
arraylist.add(0, p);
notifyDataSetChyanged();
}
productList.add(0, m);
adapter.add(m);