首页 > 解决方案 > 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>

列表视图和文本视图的结果相同

标签: javaandroid-studiolistviewarraylist

解决方案


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();

    }
}

推荐阅读