GVKun编程网logo

android – AutoCompleteTextView即使在更新ArrayAdapter时也不显示结果(更新android system webview)

8

本文将带您了解关于android–AutoCompleteTextView即使在更新ArrayAdapter时也不显示结果的新内容,同时我们还将为您解释更新androidsystemwebview的相

本文将带您了解关于android – AutoCompleteTextView即使在更新ArrayAdapter时也不显示结果的新内容,同时我们还将为您解释更新android system webview的相关知识,另外,我们还将为您提供关于Android - AutoCompleteTextView、Android AutoCompleteTextView、android AutoCompleteTextView .addTextChangedListener问题、Android AutoCompleteTextView 和 MultiAutocompleteTextView 实现动态自动匹配输入的内容的实用信息。

本文目录一览:

android – AutoCompleteTextView即使在更新ArrayAdapter时也不显示结果(更新android system webview)

android – AutoCompleteTextView即使在更新ArrayAdapter时也不显示结果(更新android system webview)

我正在尝试使用AutoCompleteTextView(ACTV)来显示我从网络资源中获取的结果.我已将完成阈值设置为2,我可以看到在输入字符时触发了请求.

我得到的结果是正确的.让我说我写“ca”,我得到结果“汽车”作为自动完成.我有一个回调函数,它接收来自AsyncTask的结果并将结果放入ArrayAdapter.然后我在ACTV上调用.showDropDown()并显示一个空的下拉列表(正常元素大小的一半).然后,如果我输入最后一个字母“r”并且ACTV显示“car”,则显示下拉列表并且结果突然出现在列表中.

如果我输入了两个字符(返回有效结果),则删除最后一个字母也会出现同样的情况.删除该字母后,“car”显示为自动完成值.

有没有人有这个问题?看起来适配器已填充结果,但结果直到我执行的下一个操作才会显示.我已经尝试在将结果添加到适配器后运行.notifyDataSetChanged(),但是不应该这样做,或者?

解决方法

如果没有看到您的代码,很难说出可能会发生什么.但首先要想到的是,您的网络请求发生在不同的线程上,因此您的performFiltering()可能会过早地返回空结果集.此时,publishResults()返回空结果,并且您的下拉列表为空.稍后,您的AsyncTask将返回其结果,并将结果添加到适配器列表中,但由于某种原因,它尚未显示.

我想你可能会错误地认为需要AsyncTask. Filter对象已经在做类似于AsyncTask的事情:performFiltering()在后台线程中完成,并且在performFiltering()完成后从UI线程调用publishResults().因此,您可以直接在performFiltering()中执行网络请求,并将结果设置为FilterResults对象,您不必担心网络请求太慢并导致UI出现问题.

另一种解决方案,稍微复杂一点,但它是我在Filter对象中所做的事情(由于现有的架构在后台执行API调用,使用异步回调而不是执行过滤所需的阻塞/同步步骤( )),使用带有wait()/ notify()的同步对象进行跨线程监视,因此效果与在performFiltering()中直接执行网络请求相同,但它实际上发生在多个线程中:

// in Filter class..
protected FilterResults performFiltering(CharSequence constraint) {

    APIResult response = synchronizer.waitForAPI(constraint);
    // ...
}

// callback invoked after the API call finishes:
public void onAPIComplete(APIResult results) {
    synchronizer.notifyAPIDone(results);
}

private class Synchronizer {
    APIResult result;

    synchronized APIResult waitForAPI(CharSequence constraint) {
        someAPIObject.startAsyncNetworkRequest(constraint);
        // At this point,control returns here,and the network request is in-progress in a different thread.
        try {
            // wait() is a Java IPC technique that will block execution until another
            // thread calls the same object's notify() method.
            wait();
            // When we get here,we kNow that someone else has just called notify()
            // on this object,and therefore this.result should be set.
        } catch(InterruptedException e) { }
        return this.result;
    }

    synchronized void notifyAPIDone(APIResult result) {
        this.result = result;
        // API result is received on a different thread,via the API callback.
        // notify() will wake up the other calling thread,allowing it to continue
        // execution in the performFiltering() method,as usual.
        notify();
    }
}

但是,我认为您可能会发现最简单的解决方案是直接在performFiltering()方法中同步执行您的网络请求.上面的代码示例只是一种可能性,如果您已经拥有适用于异步/回调驱动的API调用的体系结构,并且您不希望更改该行为以便在performFiltering()中获取同步结果.

Android - AutoCompleteTextView

Android - AutoCompleteTextView

XML代码:

<?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/linearLayout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <AutoCompleteTextView
                android:id="@+id/autoCompleteTextView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                 >

                <requestFocus />
            </AutoCompleteTextView>

        </LinearLayout>

Java代码:

package com.demo;

import android.app.Activity;
import android.os.Bundle;

import android.view.View;
import android.widget.AdapterView;
import android.widget.AutoCompleteTextView;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import android.widget.TextView;

public class ActivityBasicActivity extends Activity {
    /** 当第一次被创建时调用 */
	String[] str = {
			"rollen", "rollenholt", "rollenren", "roll","Google","百度","腾讯","腾讯游戏"
	};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);//创建一个线性布局管理器
        //this.getWindow().setBackgroundDrawableResource(R.color.mycolor);//设置背景颜色
        setContentView(R.layout.main);  //显示该视图
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,str);
        AutoCompleteTextView textview = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
        textview.setThreshold(1);//设置用户输入的字符数才显示下拉菜单
        textview.setAdapter(adapter);
    }
   
}


Android AutoCompleteTextView

Android AutoCompleteTextView

AutoCompleteTextView是一个可编辑的文本视图显示自动完成建议当用户键入。建议列表显示在一个下拉菜单,用户可以从中选择一项,以完成输入。建议列表是从一个数据适配器获取的数据。它有三个重要的方法clearListSelection():清除选中的列表项、dismissDropDown():如果存在关闭下拉菜单、getAdapter():获取适配器

completionThreshold:它的值决定了你在AutoCompleteTextView至少输入几个字符,它才会具有自动提示的功能。另,默认最多提示20条。

 dropDownAnchor:它的值是一个ViewID,指定后,AutoCompleteTextView会在这个View下弹出自动提示。

 dropDownSelector:应该是设置自动提示的背景色之类的,没有尝试过,有待进一步考证。

 dropDownWidth:设置自动提示列表的宽度。

clearListSelection();//清除选中的列表项
dismissDropDown();//如果存在关闭下拉菜单
getAdapter();//获取适配器


案例代码

1.布局文件autocompletetextview.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <AutoCompleteTextView
         android:id="@+id/antoCom_btn_id"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:completionHint="输入补全提示标题"
         android:completionThreshold="1"
        />
    <TextView
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="@string/autoText_text"
        />
    </LinearLayout>

 2、java文件AutoCompleteTextViewDemo.java

package com.dream.app.start.autocompletetextview;
import com.dream.app.start.R;

public class AutoCompleteTextViewDemo extends PublicClass {
	String  [] str = {"abc","abcd","abd","asd","asw","wse","wsq"};
	//定义数组

//    String[] province = getResources().getStringArray(R.array.province);

	private AutoCompleteTextView myauto = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.autocomplete);
		
		//定义数组
//	    String[] province = getResources().getStringArray(R.array.province);
		
		 //定义数组适配器
         ArrayAdapter<String>   autoStr = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,str);
		
         //找到自动完成组件
         myauto = (AutoCompleteTextView)findViewById(R.id.antoCom_btn_id);
		
         //为其设置适配器
         myauto.setAdapter(autoStr);
	}

}

3.执行效果:

 

 

 

 

android AutoCompleteTextView .addTextChangedListener问题

android AutoCompleteTextView .addTextChangedListener问题

下面的问题怎么解决;谢谢

private AutoCompleteTextView userNameView;

userNameView.addTextChangedListener(new TextWatcher() {

            
            @Override  //这段是起什么作用;里面从参数怎么理解呀;谢谢
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                
            }
            
            @Override          //这段是起什么作用;里面从参数怎么理解呀;谢谢
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub
                
            }
            
            @Override     //这段是起什么作用;里面从参数怎么理解呀;谢谢
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                
            }
        })

Android AutoCompleteTextView 和 MultiAutocompleteTextView 实现动态自动匹配输入的内容

Android AutoCompleteTextView 和 MultiAutocompleteTextView 实现动态自动匹配输入的内容

AutoCompleteTextView MultiAutocompleteTextView

这两个控件长的很相似,功能也很相似。

AutoCompleteTextView

  1. 功能:

    动态匹配输入的内容,如百度搜索引擎当输入文本时

    可以根据内容显示匹配的热门信息。

  2. 独特属性

    android:completionThreshold="2" // 收入两个字符后自动匹配

        ---- 设置输入多少字符时自动匹配

那我们来看一下如何实现 AutoCompleteTextView 自动匹配。

  1. XML 创建控件:

     

    1    <AutoCompleteTextView
    2         android:id="@+id/textview1"
    3         android:layout_width="match_parent"
    4         android:layout_height="wrap_content"
    5         android:completionThreshold="2"
    6         android:hint="AutoCompleteTextView" />

     

  2. Java 代码关联并实现:

     

     1         /*
     2          * 第一步: 初始化控件 
     3          * 第二步: 需要一个适配器 
     4          * 第三步: 初始化数据源----这数据源去匹配文本框中输入的内容 
     5          * 第四步: 将adapter与当前AutoCompleteTextView绑定
     6          * 
     7          */
     8 
     9         acTextView = (AutoCompleteTextView) findViewById(R.id.textview1);
    10         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    11                 android.R.layout.simple_list_item_1, res);
    12         acTextView.setAdapter(adapter);
    13

     

     

  3. 让我们调试下,功能已经实现了。

MultiAutocompleteTextView

  1. 功能:

    可支持多个值(在多次输入的情况下),分别用分隔符分开, 并且在每个值选中的时候再次输入值时会自动去匹配,

    可用在发短信,发邮件时选择联系人这种类型当中。

  2. 独特属性:

    android:completionThreshold="2" // 收入两个字符后自动匹配

        ---- 设置输入多少字符时自动匹配

  3. 设置分隔符

    Mtxt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

    可以用这个方法设置,分隔

1>XML 创建控件:

 

1     <MultiAutoCompleteTextView
2         android:id="@+id/textview2"
3         android:layout_width="match_parent"
4         android:layout_height="wrap_content"
5         android:layout_below="@id/textview1"
6         android:layout_marginTop="10dp"
7         android:hint="MultiAutoCompleteTextView" />

 

2>Java 代码关联并实现:

 

 

 1         /*
 2          * 第一步: 初始化控件 
 3          * 第二步: 需要一个适配器 
 4          * 第三步: 初始化数据源----这数据源去匹配文本框中输入的内容 
 5          * 第四步: 将adapter与当前AutoCompleteTextView绑定
 6          * 第五步: 设置分隔符
 7          * 
 8          */
 9         macTextView = (MultiAutoCompleteTextView) findViewById(R.id.textview2);
10         macTextView.setAdapter(adapter);
11         //设置以逗号为分隔符为结束的符号
12         macTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

 

3 > 让我们调试下,功能已经实现了。

这两个自动匹配的就做到这里了。这就是这两个自动匹配的用法。

这是我写的 Demo:https://pan.baidu.com/s/1DxUoDTdhbL5kosXTx5S6Pw

原文出处:https://www.cnblogs.com/MrChen-/p/10313890.html

我们今天的关于android – AutoCompleteTextView即使在更新ArrayAdapter时也不显示结果更新android system webview的分享就到这里,谢谢您的阅读,如果想了解更多关于Android - AutoCompleteTextView、Android AutoCompleteTextView、android AutoCompleteTextView .addTextChangedListener问题、Android AutoCompleteTextView 和 MultiAutocompleteTextView 实现动态自动匹配输入的内容的相关信息,可以在本站进行搜索。

本文标签: