簡體   English   中英

具有Parse.com的AutoCompleteTextView(Android)

[英]AutoCompleteTextView with Parse.com (Android)

一般而言,我是Android新手,所以我查閱了AutoCompleteTextView的文檔。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_dropdown_item_1line, USERS);
AutoCompleteTextView textView = (AutoCompleteTextView)
        findViewById(R.id.searchUserTextField);
textView.setAdapter(adapter);

我看到它只需很少的代碼即可啟動並運行。

private static final String[] COUNTRIES = new String[] {
        "user1", "user1", "user3", "user4", "user5"
};

我意識到這是一個麻煩,但是基於ParseUser表實現自動完成功能的下一步是什么,尤其是當AutoCompleteTextView的文本一次更改一個字符時? 顯然,我不會在USERS數組中填充一個Parse查詢,該查詢顯示每次嘗試搜索時我的所有用戶。 我將如何邏輯地安排這樣的事情?

首先,我可能會包含一個TextChangedListener

adapter.setNotifyOnChange(true);
    textView.addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (count % 3 == 1) {
                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        textview.setDropDownHeight(LayoutParams.WRAP_CONTENT);
                        adapter.clear();
                        // Run my background task here


                    }
                }, 1000);
            }
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        public void afterTextChanged(Editable s) {

        }
    });
    textView.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> adapterview, View v,
                int position, long arg3) {
            // TODO Auto-generated method stub
            searchUserTextField.setText(adapterview.getItemAtPosition(position)
                    .toString());
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

但是我將提供什么作為后台任務? 我要查詢什么,這樣我就不會一次搜索全部1000個用戶,這是我目前在我的應用程序中有多少個用戶?

這似乎有效。 從某種意義上講,它始終是靜態的,它始終會打印出User類中的前100個用戶。 我確定您可以添加一個約束,以使AutoCompleteTextView的第一個或第二個字母與用戶名匹配。

ParseQuery<ParseUser> userQuery = ParseUser.getQuery();
userQuery.findInBackground(new FindCallback<ParseUser>() {
    public void done(List<ParseUser> parseUsers, ParseException e) {
        if (e == null) {
            Log.d("users", "Retrieved " + parseUsers.size());
            ParseUser[] data = parseUsers.toArray(new ParseUser[parseUsers.size()]);
            String[] strings = new String[data.length];
            for (int i = 0; i < data.length; i++) {
                strings[i] = data[i].getString(ParseConstants.KEY_USERNAME);
            }
            // Test to see if it was correctly printing out the array I wanted.
            // System.out.println(Arrays.toString(strings));
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_dropdown_item_1line, strings);
            AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.searchUserTextField);
            if(parseUsers.size() < 40) textView.setThreshold(1);
            else textView.setThreshold(2);
            textView.setAdapter(adapter);
        } else {
            Log.d("users", "Error: " + e.getMessage());
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM