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
中,以便我可以在其中的特定位置找到对象
如果有更简单的方法,请让我知道
多谢各位