2017-01-09 6 views
0

누군가가 도움을 줄 수 있습니다. 예를 들어 검색된 API 데이터가있는 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

나는 그 URL에 액세스 할 수 없다 –

+0

사용자 유형 키워드 –