2017-01-09 74 views
0

也许有人可以提供帮助,我需要使用检索到的API数据通过listView搜索listView。 http://xx.yy/xy/?search=zz/Android ListView API - 搜索列表

我LoadJSON类看起来是这样的:

... 
import java.net.URL; 
import java.util.List; 

public class LoadJSONTask extends AsyncTask<String, Void, Response> { 

    public LoadJSONTask(Listener listener) { 

     mListener = listener; 
    } 

    public interface Listener { 

     void onLoaded(List<AndroidVersion> androidList); 

     void onError(); 
    } 

    private Listener mListener; 

    @Override 
    protected Response doInBackground(String... strings) { 
     try { 

      String stringResponse = loadJSON(strings[0]); 
      Gson gson = new Gson(); 

      return gson.fromJson(stringResponse, Response.class); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } catch (JsonSyntaxException e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

    @Override 
    protected void onPostExecute(Response response) { 

     if (response != null) { 

      mListener.onLoaded(response.getAndroid()); 

     } else { 

      mListener.onError(); 
     } 
    } 

    private String loadJSON(String jsonURL) throws IOException { 

     URL url = new URL(jsonURL); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(10000); 
     conn.setConnectTimeout(15000); 
     conn.setRequestMethod("GET"); 
     conn.setDoInput(true); 
     conn.connect(); 

     BufferedReader in = new BufferedReader(new   InputStreamReader(conn.getInputStream())); 
     String line; 
     StringBuilder response = new StringBuilder(); 

     while ((line = in.readLine()) != null) { 

      response.append(line); 
     } 

     in.close(); 
     return response.toString(); 
    } 
} 

和MainActivity.java是在这里:

... 
import java.util.HashMap; 
import java.util.List; 

public class MainActivity extends AppCompatActivity implements  LoadJSONTask.Listener, AdapterView.OnItemClickListener { 

    private ListView mListView; 

    public static final String URL =  "https://api.learn2crack.com/android/jsonandroid/"; 

    private List<HashMap<String, String>> mAndroidMapList = new ArrayList<> (); 

    private static final String KEY_VER = "ver"; 
    private static final String KEY_NAME = "name"; 
    private static final String KEY_API = "api"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mListView = (ListView) findViewById(R.id.list_view); 
     mListView.setOnItemClickListener(this); 
     new LoadJSONTask(this).execute(URL); 
    } 

    @Override 
    public void onLoaded(List<AndroidVersion> androidList) { 

     for (AndroidVersion android : androidList) { 

      HashMap<String, String> map = new HashMap<>(); 

      map.put(KEY_VER, android.getVer()); 
      map.put(KEY_NAME, android.getName()); 
      map.put(KEY_API, android.getApi()); 

      mAndroidMapList.add(map); 
     } 

     loadListView(); 
    } 

    @Override 
    public void onError() { 

     Toast.makeText(this, "Error !", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long  l) { 

     Toast.makeText(this,  mAndroidMapList.get(i).get(KEY_NAME),Toast.LENGTH_LONG).show(); 
    } 

    private void loadListView() { 

     ListAdapter adapter = new SimpleAdapter(MainActivity.this,   mAndroidMapList, R.layout.list_item, 
       new String[] { KEY_VER, KEY_NAME, KEY_API }, 
       new int[] { R.id.version,R.id.name, R.id.api }); 

     mListView.setAdapter(adapter); 

    } 
} 

所以,在这里,我怎么能在这里实现搜索视图,以及如何会看喜欢?提前致谢! :)

+1

使用类的ActionView。并使用搜索部件v7 –

+0

做过类似的事情,但不起作用,请给我更多的细节或代码? – nes

+1

等待。我给你代码 –

回答

1

使用此活动中 示例代码,更改根据您的需要:

List<GrpModel> grpModels=new ArrayList<>(); 
List<GrpModel> grpModelsSearch=new ArrayList<>(); 


    @Override 
    public boolean onCreateOptionsMenu(final Menu menu) { 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.search_view_menu, menu); 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
     searchView.setQueryHint("Search..."); 



     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       menu.findItem(R.id.action_search).collapseActionView(); 
       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       if (newText.length()>0){ 

        grpModels.clear(); 
        for (int s=0;s<grpModelsSearch.size();s++){ 
         final String text=grpModelsSearch.get(s).getName().toLowerCase().trim(); 
         if (text.contains(newText)){ 
          GrpModel gp=new GrpModel(); 
          gp.setGroupID(String.valueOf(grpModelsSearch.get(s).getGroupID())); 
          gp.setName(grpModelsSearch.get(s).getName()); 
          grpModels.add(gp); 
         } 
        } 

        adapter.notifyDataSetChanged(); 
       } 
       else { 

        grpModels.clear(); 

        for (int s=0;s<grpModelsSearch.size();s++){ 
         GrpModel gp=new GrpModel(); 
         gp.setGroupID(String.valueOf(grpModelsSearch.get(s).getGroupID())); 
         gp.setName(grpModelsSearch.get(s).getName()); 
         grpModels.add(gp); 
        } 

        adapter.notifyDataSetChanged(); 

       } 

       return false; 
      } 

     }); 
     return super.onCreateOptionsMenu(menu); 
    } 

创建菜单:search_view_menu.xml在工具栏

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".MainActivity"> 
    <item 
     android:id="@+id/action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always|collapseActionView" 
     android:icon="@drawable/ic_search_white_24dp" 
     android:title="Search" /> 

</menu> 
+0

谢谢,我该如何适应我的代码来返回这个:http://xx.yy/xy/?search = zz /而不是搜索已经检索的数据? – nes

+0

我无法访问该网址 –

+0

你必须使每次用户类型关键字的API调用 –