1

AutoCompleteTextViewテーブルから名前を提案する必要がありますMySQL。ハードコーディング a でこれを使用したのは一度だけstring arrayです。

このリンクで 1 つの例しか見たことがありませんが、実際にはあまり役に立ちませんでした。でこれを行う必要がありますAsyncTask。私はその部分を処理する方法を知ってAsynTaskいますが、ここに私の質問があります:

の として入力されたフレーズの各部分を送信する必要がparamありtaskます。このテキストはどこで入手できますstringか?

私が見ることができる唯一の方法はTextWatcher多分です。そうでしょうか、それとも別の方法がありますか?

4

3 に答える 3

1

そうでしょうか、それとも別の方法がありますか?

入力ボックスの変更を「監視」するメカニズムが必要であり、それを達成する最も正しい方法が言及されていますTextWatcher

したがって、それを実装しTextWatcher、たとえばonTextChanged()を提供するメソッドで、入力ボックスからデータを割り当て、パラメーターとして AsyncTask に送信し onPostExecute ()AutoCompleteTextViewメソッドで、取得したデータを使用して新しいアダプターを作成しMySQL、アダプターをウィジェットに割り当てます。それ。

擬似コード:

public void onTextChanged(CharSequence s, int start, int before, int count) {
   if (s.length() > 1) {
      insertString = s.toString();
      new YourTask().execute(insertString);                  
   }
}

AsyncTask で、次のように実行します。

protected List<String> doInBackground() {
   // fetchning data from MySQL
   return list;
}

public void onPostExecute(List<String> result) {
   if (!result.isEmpty()) {
       SomeAdapter adp = new SomeAdapter(context, layout, result);
       actv.setAdapter(adp);
   }
}

注:あなたの場合AsyncTask、クラスの内部クラスを作成する方が簡単で、コンストラクターを介してコンポーネントを渡すことなく、コンポーネントにActivity直接アクセスできます。UI

于 2013-04-19T15:42:05.200 に答える
1

AutoCompleteTextViewすでにこれを処理しています。基本的に、デフォルトでは、リストをフィルタリングする必要があると判断すると、performFilteringメソッドを呼び出します。

したがって、既存のロジックを再利用する場合は、メソッドAutoCompleteTextViewをオーバーライドするサブクラスを作成し、performFilteringそこにフィルタリングを実行するためのコードを配置します (この場合は AsyncTask 呼び出し)。このようなもの:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;

public class MyAutoCompleteTextView extends AutoCompleteTextView {

    public MyAutoCompleteTextView(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void performFiltering(CharSequence text, int keyCode) {
        //Here the AutompleteTextView has determined that the list should be filtered
    }

}
于 2013-04-19T15:50:58.230 に答える
0

AsynTask ベロー コードを追加する方法

public class MainActivity extends Activity {

AutoCompleteTextView txtSearch;
PeopleAdapter adapter;
List<People> mList;
TextView idd;
ImageView imgspn;


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

    mList = retrievePeople();

    txtSearch = (AutoCompleteTextView) findViewById(R.id.txt_search);

    adapter = new PeopleAdapter(this, R.layout.activity_main, R.id.lbl_name, mList);
    txtSearch.setThreshold(1);
    txtSearch.setAdapter(adapter);

    idd = (TextView) findViewById(R.id.idd);
    imgspn = (ImageView) findViewById(R.id.imgspn);
    imgspn.setVisibility(View.INVISIBLE);

    txtSearch.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String Name = mList.get(position).getId();
            idd.setText(Name);
        }
    });

}

private List<People> retrievePeople() {

    List<People> list = new ArrayList<People>();
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.0.1:3306/stud", "root",
                "Windouspass");
        Statement st = (Statement) con.createStatement();
        ResultSet rs = (ResultSet) st.executeQuery(
                "select name,designation_name,id from umdlv_users ut,t_designation td where ut.designation_id = td.designation_id");
        while (rs.next()) {

            list.add(new People(rs.getString(1), rs.getString(2), rs.getString(3)));
        }
        rs.close();
        st.close();
        con.close();
    } catch (Exception e) {
    }
    return list;
}

}

于 2016-05-12T17:47:49.460 に答える