2

検索アクティビティを作成しようとしています。レイアウトにはEditText(検索クエリを入力するため) Button& ListView(検索結果を表示するため) が含まれます。search_layout.xml (検索ボックス & を表示するためListView) は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/editText_search"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="@string/search_practice" />

         <Button 
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="@string/button_search"
             android:onClick="searchPractice" />

    </LinearLayout>

     <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ListView 
            android:id="@+id/praclist"
            android:layout_weight="1"
            android:layout_width="fill_parent"            
            android:layout_height="fill_parent" />

    </LinearLayout>

</LinearLayout>

リスト項目 list_items.xml のレイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">  
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <!-- Name Label -->
        <TextView
            android:id="@+id/name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#43bd00"
            android:textSize="16sp"
            android:textStyle="bold"
            android:paddingTop="6dip"
            android:paddingBottom="2dip" />
        <!-- Description label -->
        <TextView
            android:id="@+id/city"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#acacac"
            android:paddingBottom="2dip">
        </TextView>
        <TextView
            android:id="@+id/email"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#acacac"
            android:paddingBottom="2dip">
        </TextView>
        <!-- Linear layout for cost and price Cost: Rs.100 -->
        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <!-- Cost Label -->
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#5d5d5d"
            android:gravity="left"
            android:textStyle="bold"
            android:text="Phone: " >
        </TextView>
        <!-- Price Label -->
        <TextView
            android:id="@+id/phone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#acacac" 
            android:textStyle="bold"
            android:gravity="left">
        </TextView>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

ボタンのクリック (searchBtnClick) で、メソッド doMySearch を呼び出しています。

public void searchBtnClick(View view){
  -------
  ------
  ListAdapter adapter = doSearch(query);
  ListView pracListView = (ListView) findViewById(R.id.praclist);
  PracListView.setAdapter(adapter);
  return;
}

private ListAdapter doSearch(String query){
    ListAdapter adapter = null;
String url = "https://mywebservice.com/apps/api/v1/search/practices?val="+query+"&by=nam";

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(url);
String jsonResponsse = null;


try{
    HttpResponse httpResponse = httpClient.execute(httpGet, localContext);
    HttpEntity httpEntity = httpResponse.getEntity();
    jsonResponsse = getASCIIContentFromEntity(httpEntity);          
    Gson gson = new Gson();
    PracticesByName practicesByName = gson.fromJson(jsonResponsse,PracticesByName.class);
    ArrayList<Practices> practiceList = (ArrayList<Practices>)practicesByName.getPractices();
    for(int i=0 ; i < practiceList.size() ; i ++){   
        Object a = practiceList.get(i);
        System.out.println(a.getClass() + "   " + a.toString());
        Practices aPractice = practiceList.get(i);
        HashMap<String, String> aMap = new HashMap<String, String>();
        aMap.put(TAG_NAME, aPractice.getName());
        aMap.put(TAG_CITY, aPractice.getCity());
        aMap.put(TAG_EMAIL, aPractice.getEmail());
        aMap.put(TAG_PHONE, aPractice.getPhone());


        searchResultList.add(aMap);


    }


    adapter = new SimpleAdapter(this, searchResultList,
            R.layout.list_item_prac_search,
            new String[] { TAG_NAME, TAG_CITY, TAG_EMAIL, TAG_PHONE}, new int[] {
                    R.id.name, R.id.city, R.id.email, R.id.phone});
    //pracListView.setAdapter(adapter);


}catch (Exception e){
        System.out.println("Exception while getting serach for practice");
        e.printStackTrace();
}

return adapter;

}

コードは正常に実行されています。Web サービスから検索結果を取得しています。しかし、以下のリストは表示されません。私が何を台無しにしているのか分かりますか?

4

2 に答える 2

0

最初に配列 lis を作成して、クエリからレコードを取得する必要があります。

ArrayList<String> items = new ArrayList<String>();
        items.add(doSearch(query));

次に、この行を置き換えます。

ListAdapter adapter = doSearch(query);

この行で、

ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,items);
ListView pracListView = (ListView) findViewById(R.id.praclist);
  PracListView.setAdapter(adapter);
于 2012-09-13T10:15:53.800 に答える
0

最後に、動作しました。search_layout.xmlを次のように修正しました。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/editText_search"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="@string/search_practice"
            android:imeOptions="actionDone" />

         <Button 
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:text="@string/button_search"
             android:onClick="searchPractice" />         
    </LinearLayout>

    <ListView 
            android:id="@+id/praclist"
            android:layout_weight="1"
            android:layout_width="match_parent"            
            android:layout_height="wrap_content" />

</LinearLayout>

外側のレイアウトを垂直にし、水平レイアウト(EditTextと検索ボタンを含む)とListViewを配置します。

御時間ありがとうございます。

于 2012-09-13T13:23:44.370 に答える