2017-09-29 12 views
0

テキストフィールドが空のときにユーザーにすべての提案を表示したい、ユーザーがドロップダウンに表示される単語を入力するときにjsonの応答から私の提案を得ているが、テキストフィールドが空でも何も表示されていないのですが、showDropDown() Androidモニターでは次のように表示されます:入力イベントを終了しようとしましたが、入力イベント受信者は既に破棄されています。私はURLからキーワードを解析 JSONパーサーのまず、これらのクラスから私の提案アダプタを取得autcompletetextviewで提案のドロップダウンを表示する方法

public class MainActivity extends AppCompatActivity { 
AutoCompleteTextView acTextView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    acTextView = (AutoCompleteTextView) findViewById(R.id.autoComplete); 
    acTextView.setAdapter(new SuggestionAdapter(this,acTextView.getText().toString())); 
    acTextView.setThreshold(0); 

    acTextView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      acTextView.showDropDown(); 
     } 
    }); 
     } 
    }); 
    } 
} 

は、ここに私のコードです。 ゲッターセッタークラス。 提案アダプターはアダプターにフィルター処理された項目を設定します。 私のJSONレスポンス:

[{"lookupValueId":350,"lookupTypeId":33,"lookupValue":"Java"},{"lookupValueId":351,"lookupTypeId":33,"lookupValue":"C++"},{"lookupValueId":352,"lookupTypeId":33,"lookupValue":"Photoshop"},{"lookupValueId":353,"lookupTypeId":33,"lookupValue":"Java Script"}] 

JSONパーサクラス:

public class JsonParse { 


public List<SuggestGetSet> getParseJsonWCF(String sName) 
{ 
    List<SuggestGetSet> ListData = new ArrayList<SuggestGetSet>(); 
    try { 
     String temp = sName.replace(" ", "%20"); 
     URL js = new URL("http://SomeUrl" + temp + "%22%7D%7D"); 
        URLConnection jc = js.openConnection(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(jc.getInputStream())); 
     String line = reader.readLine(); 
     JSONArray jsonResponse = new JSONArray(line); 
     System.out.print("DATA: " + line); 
     for(int i = 0; i < jsonResponse.length(); i++){ 
      JSONObject r = jsonResponse.getJSONObject(i); 
      ListData.add(new SuggestGetSet(r.getInt("lookupValueId"),r.getString("lookupValue"))); 
     } 
    } catch (Exception e1) { 
     e1.printStackTrace(); 
    } 
    return ListData; 

    } 
} 

ゲッターセッタークラス:

public class SuggestGetSet { 
String name; 
static Integer id; 
public SuggestGetSet(int id, String name){ 
    this.setId(id); 
    this.setName(name); 
} 
public static Integer getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
    } 
} 

そして最後にアダプタクラス:

class SuggestionAdapter extends ArrayAdapter<String> { 

private List<String> suggestions; 

SuggestionAdapter(Activity context,String nameFilter) { 
    super(context, android.R.layout.simple_dropdown_item_1line); 
    suggestions = new ArrayList<>(); 
} 


@Override 
public int getCount() { 
    return suggestions.size(); 
} 

@Override 
public String getItem(int index) { 
    return suggestions.get(index); 
} 

@NonNull 
@Override 
public Filter getFilter() { 
    return new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults filterResults = new FilterResults(); 
      JsonParse jp = new JsonParse(); 
      if (constraint != null) { 
       // A class that queries a web API, parses the data and 
       // returns an ArrayList<GoEuroGetSet> 
       List<SuggestGetSet> new_suggestions = jp.getParseJsonWCF(constraint.toString()); 
       suggestions.clear(); 
       for (int i = 0; i < new_suggestions.size(); i++) { 
        suggestions.add(new_suggestions.get(i).getName()); 
       } 

       // Now assign the values and count to the FilterResults 
       // object 
       filterResults.values = suggestions; 
       filterResults.count = suggestions.size(); 
      } 
      return filterResults; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, 
             FilterResults results) { 
      if (results != null && results.count > 0) { 
       notifyDataSetChanged(); 
      } else { 
       notifyDataSetInvalidated(); 
      } 
     } 
    }; 
    } 
} 

私はこの参照に従った:http://manishkpr.webheavens.com/android-autocompletetextview-example-json/

+0

このスレッドに従ってください:[テキストがないときは、提案を表示](https://stackoverflow.com/questions/2126717/android-autocompletetextview-show-suggestions-when-no-text-entered) –

+0

私はそれをはじめ多くのチュートリアルとstackoverflowの答え。何も役に立たなかったので、最終的に質問を投稿しました。 – KhanStan99

答えて

2

最初に応答を取得し、活動のarraylistをあなたのアダプターに渡す。ギータは、まずJSON以外からのArrayListを作成言ったように あなたのコード

acTextView.setAdapter(new SuggestionAdapter(this,yourarraylist)); 
+0

現在、私はこのようにしています: 'acTextView.setAdapter(new SuggestionAdapter(this、acTextView.getText()。toString()));'これは私のテキストを渡して提案を得るでしょう。あなたは私に何をしたいのですか?あなたは詳細を教えていただけますか? – KhanStan99

+0

まだ動作していませんか? –

+0

いいえ動作しません。私がしたいのは、ユーザーがautocompletetextviewをクリックしたときに、すべての提案がドロップダウン表示されるはずです。 \ nはこれは私が acTextView.setOnClickListener(新View.OnClickListener(){ (@) ます。public void onClickの(ビュービュー){ acTextView.getHandler()をオーバーライドをしています方法です。ポスト(新しいRunnableを(){ @Override公共ボイドラン(){ acTextView.showDropDown();} })。 } }); \t \t; – KhanStan99

0

Androidがあなたのコンポーネントと同じ

を提供する場合は、カスタムアダプタが必要なのか、なぜまず第一は、このtutorialthis

の提案に従ってください最高のアプローチであるadpterに渡す

希望これはあなたの幸運を助ける

+0

私のjsonレスポンスからアレイを正常に作成しました。その配列を私の主な活動にどのように渡すのですか? – KhanStan99

関連する問題