Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java autoCompleteTextView setOnItemClickListener以填充RecyclerView_Java_Android_Firebase_Android Recyclerview_Google Cloud Firestore - Fatal编程技术网

Java autoCompleteTextView setOnItemClickListener以填充RecyclerView

Java autoCompleteTextView setOnItemClickListener以填充RecyclerView,java,android,firebase,android-recyclerview,google-cloud-firestore,Java,Android,Firebase,Android Recyclerview,Google Cloud Firestore,我创建了一个通过查询firestore填充的autoCompleteTextView 自动完成的作用是,它提供了一些在我的firestore上找到的字符串。然而,我希望一旦用户点击其中一个建议,它就会转到firestore云中的另一个文档,并使用它来填充RecyclerView 我将尝试用简单的例子来解释: My firestore有2个集合(ID、名称),它们之间存在连接(ID显示在两个集合中): 当用户开始键入“wh”时,“我的自动完成”将通过使用以下选项找到: public class

我创建了一个通过查询
firestore
填充的
autoCompleteTextView

自动完成的作用是,它提供了一些在我的
firestore
上找到的字符串。然而,我希望一旦用户点击其中一个建议,它就会转到firestore云中的另一个文档,并使用它来填充
RecyclerView

我将尝试用简单的例子来解释:

My firestore有2个集合(ID、名称),它们之间存在连接(ID显示在两个集合中):

当用户开始键入
“wh”
时,“我的自动完成”将通过使用以下选项找到:

public class MainActivity extends AppCompatActivity {

    private AutoCompleteTextView autoCompleteTextView;
    private FirebaseFirestore db;

    private RecyclerView recyclerView;

    private ArrayAdapter<String> listAdapter;
    private customAdapter customAdapter;

    private List<String> names;
    private List<String> ids;

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

        db = FirebaseFirestore.getInstance();

        LinearLayoutManager layoutManager = new LinearLayoutManager( this, LinearLayoutManager.HORIZONTAL, false );
        recyclerView = findViewById( R.id.recycler );
        recyclerView.setLayoutManager( layoutManager );

        autoCompleteTextView = findViewById( R.id.autoComplete );
        autoCompleteTextView.addTextChangedListener( new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                if (s.length() > 0) {
                    names = new ArrayList<String>();
                    ids = new ArrayList<String>();

                    db.collection( "Names" )
                            .whereGreaterThanOrEqualTo( "UserName", s.toString() ).whereLessThanOrEqualTo( "UserName", s.toString() + "\uF7FF" ).limit( 10 ).get()
                            .addOnCompleteListener( new OnCompleteListener<QuerySnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                    if (task.isSuccessful()) {
                                        for (QueryDocumentSnapshot document : task.getResult()) {
                                            String name = document.getString( "UserName" );
                                            String id = document.getString( "ID" );
                                            names.add( name );
                                            ids.add( id );
                                        }

                                    }

                                }
                            } );

                }

            }

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

            }

            @Override
            public void afterTextChanged(Editable s) {

                new CountDownTimer( 500, 500 ) {
                    public void onFinish() {

                        Set<String> set = new HashSet<>( names );
                        names.clear();
                        names.addAll( set );

                        Set<String> set2 = new HashSet<>( ids );
                        ids.clear();
                        ids.addAll( set2 );

                        listAdapter = new ArrayAdapter<String>( getApplicationContext(), R.layout.item_drop, names );
                        autoCompleteTextView.setThreshold( 0 );
                        autoCompleteTextView.setAdapter( listAdapter );

                    }

                    public void onTick(long millisUntilFinished) {
                    }
                }.start();

            }
        } );
autoCompleteTextView.setOnItemClickListener( new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {

        String names = parent.getAdapter().getItem( position ).toString();
        Toast.makeText( MainActivity.this,
                names,
                Toast.LENGTH_SHORT ).show();
                
    }
} );
我可以获得该职位的名称,如
“ben是什么”
,但我没有访问
id列表的权限,无法找到相应id的职位。如果我有该选项,我将使用:

db.collection( "IDS" )
        .whereEqualTo( "ID", ids.get( position ) ).get()
        .addOnCompleteListener( new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        String NAME = document.getString( "NAME" );
                        Toast.makeText( MainActivity.this,
                                NAME,
                                Toast.LENGTH_SHORT ).show();
                    }

                }

            }
        } );
db.collection(“id”)
.whereEqualTo(“ID”,ID.get(position)).get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
字符串名称=document.getString(“名称”);
Toast.makeText(MainActivity.this,
名称
Toast.LENGTH_SHORT).show();
}
}
}
} );
然后将其推送到
回收视图

有没有办法将另一个列表传递到
autoCompleteTextView.setOnItemClickListener
中,以便我可以在其中的特定位置找到对象

如果有更简单的方法,请让我知道

多谢各位