Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 Android Listview:搜索后项目不会重新显示_Java_Android_Android Studio - Fatal编程技术网

Java Android Listview:搜索后项目不会重新显示

Java Android Listview:搜索后项目不会重新显示,java,android,android-studio,Java,Android,Android Studio,我有一个小应用程序,上面列出了一些叫做“Spielort”的项目。通过EditText搜索它们效果很好,但是当删除搜索字符串或仅删除其中的字母时,整个项目列表不会重新出现。有人知道为什么,并可能提供一些关于如何编辑我的代码的建议吗 SpielortAdapter.java package fasde.android.distanceapp; import android.content.Context; import android.view.LayoutInflater; import an

我有一个小应用程序,上面列出了一些叫做“Spielort”的项目。通过EditText搜索它们效果很好,但是当删除搜索字符串或仅删除其中的字母时,整个项目列表不会重新出现。有人知道为什么,并可能提供一些关于如何编辑我的代码的建议吗

SpielortAdapter.java

package fasde.android.distanceapp;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;

import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class SpielortAdapter extends ArrayAdapter<Spielort> {

    private Context context;
    private List<Spielort> spielortList;
    private List<Spielort> filteredList;
    private List<Spielort> allDataList;
    private SpielortFilter filter;

    public SpielortAdapter(@NonNull Context context, @LayoutRes ArrayList<Spielort> spielortList) {
        super(context, 0, spielortList);
        this.context = context;
        this.spielortList = spielortList;
        this.allDataList = spielortList;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View listItem = convertView;
        if (listItem == null) {
            listItem = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
        }
        Spielort ort = spielortList.get(position);

        TextView spielort = listItem.findViewById(R.id.textView_ort);
        spielort.setText("\t" + ort.getSpielort());

        TextView km = listItem.findViewById(R.id.textView_km);
        km.setText(Integer.toString(ort.getDistanz()) + "km");

        TextView kosten = listItem.findViewById(R.id.textView_kosten);
        kosten.setText(ort.getKosten().toString() + "€");

        TextView kreis = listItem.findViewById(R.id.textView_kreis);
        kreis.setText(ort.getKreis().getName());

        return listItem;
    }

    @Override
    public Filter getFilter() {
        if (filter == null) {
            filter = new SpielortFilter();
        }
        return filter;
    }

    private class SpielortFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            constraint = constraint.toString().toLowerCase();
            FilterResults results = new FilterResults();
            if (constraint != null && constraint.toString().length() > 0) {
                filteredList = new ArrayList<>();
                for (Spielort ort : spielortList) {
                    if (ort.getSpielort().toLowerCase().contains(constraint)) {
                        filteredList.add(ort);
                    }
                }
                results.count = filteredList.size();
                results.values = filteredList;
            } else {
                results.values = allDataList;
                results.count = allDataList.size();

            }
            return results;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, @NotNull FilterResults results) {
            spielortList = (ArrayList<Spielort>) results.values;
            notifyDataSetChanged();
        }
    }


}

publishResults
方法中删除以下3行

        clear();
        for (Spielort ort : spielortList) {
            add(ort);
        }
        notifyDataSetInvalidated();
更新您的
performFiltering()

constraint=constraint.toString().toLowerCase();
FilterResults results=新的FilterResults();
filteredList=新建ArrayList();
对于(Spielort ort:allDataList){
如果(ort.getSpielort().toLowerCase().contains(约束)){
filteredList.add(ort);
}
}
results.count=filteredList.size();
results.values=filteredList;

现在应用程序在添加searchingErrorlog时崩溃。是的,检查了get count方法中返回的内容?我没有覆盖它,所以我猜它是来自ArrayAdapters getCount()的int。覆盖它并返回spielortList.size()
E/: [ZeroHung]zrhung_get_config: Get config failed for wp[0x0008]
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: fasde.android.distanceapp, PID: 9529
    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.get(ArrayList.java:437)
        at fasde.android.distanceapp.SpielortAdapter.getView(SpielortAdapter.java:42)
        at android.widget.AbsListView.obtainView(AbsListView.java:2451)
        at android.widget.HwAbsListView.obtainView(HwAbsListView.java:935)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1426)
        at android.widget.ListView.onMeasure(ListView.java:1333)
        at android.view.View.measure(View.java:23466)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:401)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:726)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:847)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2954)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1753)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2041)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
        at android.view.Choreographer.doCallbacks(Choreographer.java:893)
        at android.view.Choreographer.doFrame(Choreographer.java:812)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
I/Process: Sending signal. PID: 9529 SIG: 9
Process 9529 terminated.
        clear();
        for (Spielort ort : spielortList) {
            add(ort);
        }
        notifyDataSetInvalidated();
 constraint = constraint.toString().toLowerCase();
 FilterResults results = new FilterResults();
 filteredList = new ArrayList<>();
            for (Spielort ort : allDataList) {
                if (ort.getSpielort().toLowerCase().contains(constraint)) {
                    filteredList.add(ort);
                }
            }
            results.count = filteredList.size();
            results.values = filteredList;