java - Listview 仅显示数组列表中的第一个结果
问题描述
我有下面的代码,它显示了数组列表的结果,但是,它只显示了测试结果,我将相同的结果附加到文本视图进行测试,发现我从查询方法得到的结果确实包含多个他们已经出现在文本视图中,但列表视图只显示第一个。请在下面找到代码以及所附图片。
//searchactivity.class//
package com.example.boc.search;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.example.boc.Interface.IMainActivity;
import com.example.boc.R;
import com.example.boc.main.phone_nombers_Activity;
import com.example.boc.models.Note;
import com.example.boc.models.Search;
import com.google.android.gms.tasks.OnCompleteListener;
import android.widget.ArrayAdapter;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
public class searchActivity extends phone_nombers_Activity implements
View.OnClickListener,
IMainActivity
{
private DocumentSnapshot documentSnapshot;
ListView listView;
public TextView resultTxt , userinput ;
private ArrayList<Search> mSearch = new ArrayList<>();
public FirebaseFirestore db = FirebaseFirestore.getInstance();
public Note note ;
public LinearLayout layout ;
private ArrayList<Note> mNotes = new ArrayList<>();
private DocumentReference noteRef = db.collection("notes").document();
private CollectionReference notesCollectionRef = db.collection("notes");
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_search );
final ListView listView = findViewById( R.id.listview4 );
final EditText userinput = findViewById( R.id.userInputtxt );
final Button findbutton = findViewById( R.id.findBtn );
final TextView resultTxt = findViewById( R.id.resultTxt );
mRecyclerView = findViewById(R.id.recycler_view);
FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference notesCollectionRef = db
.collection("notes");
Query notesQuery = null;
if(documentSnapshot != null){
notesQuery = notesCollectionRef;
}
else{
notesQuery = notesCollectionRef
.orderBy("timestamp", Query.Direction.ASCENDING);
}
notesQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
String data = "";
for(final QueryDocumentSnapshot document: task.getResult()){
Note note = document.toObject(Note.class);
mNotes.add(note);
if( userinput !=null ) {
findbutton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
final String userinputString = userinput.getText().toString();
Note match = null;
String matcheddata ="";
for (Note note : mNotes) {
if (note.getTitle().contains(userinputString)) {
match = note;
String matchedtitle = match.getTitle();
String matchedcontent = match.getContent();
matcheddata += "هاتف:" + matchedcontent + "\nالاسم:" + matchedtitle + "\n\n";
}
if (match != null) {
ArrayList<String> namesList = new ArrayList<>();
resultTxt.setText( matcheddata );
namesList.clear();
ArrayAdapter<String>adapter = new ArrayAdapter<>( getApplicationContext(), android.R.layout.simple_selectable_list_item, namesList );
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
namesList.add(matcheddata);
// Found a match
//previewResultTextview.setOnClickListener( new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// String content = previewResultTextview.getText().toString();
// Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", contenttoparse, null));
// startActivity(intent);
// }
// } );
}
}
}
} );
}
else {
userinput.setError( "اسم الملف مطلوب" );
}
}
}
}
});
}
@Override
public void onStart () {
super.onStart();
}
}
//searchactivity.xml//
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".search.searchActivity">
<EditText
android:id="@+id/userInputtxt2"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginStart="8dp"
android:paddingTop="50dp"
android:textColor="@color/Black"
android:textSize="18sp" />
<EditText
android:id="@+id/userInputtxt"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginStart="8dp"
android:paddingTop="50dp"
android:textColor="@color/Black"
android:textSize="18sp" />
<Button
android:id="@+id/findBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="320dp"
android:layout_marginEnd="3dp"
android:text="find"
android:textSize="10sp" />
<ListView
android:id="@+id/listview4"
android:layout_width="398dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="55dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp">
</ListView>
<TextView
android:id="@+id/resultTxt"
android:layout_width="match_parent"
android:layout_height="203dp"
android:layout_marginTop="450dp"
android:background="@color/transparentGrey"
android:text="TextView" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
解决方案
if (match != null) {
ArrayList<String> namesList = new ArrayList<>();
resultTxt.setText( matcheddata );
// namesList.clear(); // You don't need to clear it as you just created it above
namesList.add(matcheddata);
ArrayAdapter<String> adapter = new ArrayAdapter<>( getApplicationContext(), android.R.layout.simple_selectable_list_item, namesList );
listView.setAdapter(adapter);
}
嗨,Amer Anajjem,您能否尝试在创建适配器之前准备 namesList 并使用最新的 namesList 来创建适配器。
编辑:
我发现问题是:matcheddata
是一个字符串。当您调用 时namesList.add(matcheddata);
,您仅在列表中添加了 1 项。结果,您在列表视图中只有 1 个项目。为了证明这一点,您可以尝试以下方法:
if (match != null) {
ArrayList<String> namesList = new ArrayList<>();
resultTxt.setText( matcheddata );
namesList.clear();
namesList.add(matcheddata);
namesList.add(matcheddata);
ArrayAdapter<String> adapter = new ArrayAdapter<>( getApplicationContext(), android.R.layout.simple_selectable_list_item, namesList );
listView.setAdapter(adapter);
}
您应该在列表视图中看到 2 个重复项。
编辑2:
你可以试试这个,但我没有测试它。
package com.example.boc.search;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.example.boc.Interface.IMainActivity;
import com.example.boc.R;
import com.example.boc.main.phone_nombers_Activity;
import com.example.boc.models.Note;
import com.example.boc.models.Search;
import com.google.android.gms.tasks.OnCompleteListener;
import android.widget.ArrayAdapter;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
public class searchActivity extends phone_nombers_Activity implements
View.OnClickListener,
IMainActivity
{
private DocumentSnapshot documentSnapshot;
ListView listView;
public TextView resultTxt , userinput ;
private ArrayList<Search> mSearch = new ArrayList<>();
public FirebaseFirestore db = FirebaseFirestore.getInstance();
public Note note ;
public LinearLayout layout ;
private ArrayList<Note> mNotes = new ArrayList<>();
private DocumentReference noteRef = db.collection("notes").document();
private CollectionReference notesCollectionRef = db.collection("notes");
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_search );
final ListView listView = findViewById( R.id.listview4 );
final EditText userinput = findViewById( R.id.userInputtxt );
final Button findbutton = findViewById( R.id.findBtn );
final TextView resultTxt = findViewById( R.id.resultTxt );
mRecyclerView = findViewById(R.id.recycler_view);
FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference notesCollectionRef = db
.collection("notes");
Query notesQuery = null;
if(documentSnapshot != null){
notesQuery = notesCollectionRef;
}
else{
notesQuery = notesCollectionRef
.orderBy("timestamp", Query.Direction.ASCENDING);
}
notesQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
String data = "";
for(final QueryDocumentSnapshot document: task.getResult()){
Note note = document.toObject(Note.class);
mNotes.add(note);
if( userinput !=null ) {
findbutton.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
final String userinputString = userinput.getText().toString();
ArrayList<String> namesList = new ArrayList<>();
for (Note note : mNotes) {
if (note.getTitle().contains(userinputString)) {
String matchedtitle = note.getTitle();
String matchedcontent = note.getContent();
String matcheddata += "هاتف:" + matchedcontent + "\nالاسم:" + matchedtitle + "\n\n";
namesList.add(matcheddata);
}
ArrayAdapter<String> adapter = new ArrayAdapter<>( getApplicationContext(), android.R.layout.simple_selectable_list_item, namesList );
listView.setAdapter(adapter);
}
} );
}
else {
userinput.setError( "اسم الملف مطلوب" );
}
}
}
}
});
}
@Override
public void onStart () {
super.onStart();
}
}
推荐阅读
- php - 我的 PHP 邮件程序代码给出了 HTTP 500 错误
- javascript - 尝试删除 api 密钥但得到“等待仅在异步函数中有效”
- javascript - 编译 swig 包装的 cxx 文件时 v8.h 中出现未定义的引用错误
- xamarin.ios - 在后台时从 Xamarin iOS 提交数据
- c# - 为什么while循环之后的语句被执行?
- c++ - 如何将派生类的指针传递给基类指针的引用?
- c# - 考虑类的多个属性的优雅排序算法
- python - 无法使用 Celery + Django + Gunicorn 运行后台任务
- nginx - Google Lighthouse 加载 webp 图像时出错
- javascript - 答案现在未定义,正在工作并突然停止