Android Probleme mit SearchView in ArrayAdapter

Hallo,
ich bin neu im Programmieren und versuche mir gerade eine App zu erstellen, die mir eine Liste von codes ausgibt. Bei klicken auf den entsprechenden werde ich auf die Beschreibung weitergeleitet. Dies funktioniert wunderbar.

Da ich eine sehr große Liste anzeigen lasse, möchte ich noch einen SearchView einfügen. Leider komme ich da gar nicht klar. Selbst mit Beispielen aus dem Netz bekomme ich das nicht hin.
Ich hoffe es kann mir jemand helfen. Na ch folgend mein Code aus der MainActivity und die ListActivity für das Anzeigen der Beschreibung.

Suche
Suche.JPG
Ausgabe der Infos auf der ListActivity.java
Ausgaben.JPG

MainActivity.java
Code:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {   
    ListView listView;
    Button but_zu_codes;
    ArrayAdapter<String> mAdapter;

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

        but_zu_codes = (Button) findViewById(R.id.codes);
        but_zu_codes.setOnClickListener(this);

        listView = (ListView) findViewById(R.id.listView);

        mAdapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_list_item_1,
                getResources().getStringArray(R.array.tr_codes));

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(MainActivity.this, ListActivity.class);
                intent.putExtra("TroubleCodes", listView.getItemAtPosition(i).toString());
                startActivity(intent);
            }
        });
        listView.setAdapter(mAdapter);
}

ListActivity.java // Beschreibung der Codes nach anklicken in MainActivity

Code:
public class ListActivity extends AppCompatActivity {
    ListView listView;
    String[] states;   

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

        listView = (ListView) findViewById(R.id.listView);
        Bundle mBundle = getIntent().getExtras();
        if (mBundle != null) {
            String country = mBundle.getString("TroubleCodes");
            if (country.equalsIgnoreCase("B0562")) {
                states = getResources().getStringArray(R.array.c_B0562);
            }
            else if (country.equalsIgnoreCase("B0563")) { states = getResources().getStringArray(R.array.c_B0563); }
            else if (country.equalsIgnoreCase("B1004")) { states = getResources().getStringArray(R.array.c_B1004); }
            else if (country.equalsIgnoreCase("B1005")) { states = getResources().getStringArray(R.array.c_B1005); }
            else if (country.equalsIgnoreCase("B1006")) { states = getResources().getStringArray(R.array.c_B1006); }
        }

        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(ListActivity.this,
                android.R.layout.simple_list_item_1, states);
        listView.setAdapter(mAdapter);
    }

    @Override
    public void onClick(View v) {

        if (v.getId() == R.id.codes) {
            Intent weiter = new Intent(MainActivity.this, MainActivity.class);
            startActivity(weiter);
        }
    }
}


activity_main.xml //Layout

Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:id="@+id/activity_start"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="2dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    tools:context="com.example.customlistview.MainActivity"
    android:weightSum="1">
    <SearchView
        android:layout_width="match_parent"
        android:layout_height="26dp" />
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="480dp"
        android:id="@+id/listView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/toolbar"
        android:layout_weight="0.72" />
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:text="Codes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/codes"
            android:background="@android:color/transparent"/>
</LinearLayout>
</LinearLayout>
 

Anhänge

  • main.zip
    35,1 KB · Aufrufe: 1

looparda

Top Contributor
Was funktioniert denn nicht wie du erwartest? Ist mir gerade nicht ersichtlich ohne den Code herunterzuladen und auszuprobieren.
 
Es funktioniert einwandfrei. Ich möchte nur gerne in meiner MainActivity eine Suchfunktion einbauen. Das bekomme ich leider nicht hin. Sitze nun schon 3 Tage dran und habe es immer wieder versucht.

Meine Bitte ist, ob mir jemand da weiterhelfen kann.
 

looparda

Top Contributor
Genau das war meine Frage. Woran scheitert es denn?
Ich konnte gerade mit der Anleitung unter http://abhiandroid.com/ui/searchview die Suche in deinen Code integrieren. Vielleicht versuchst du es mal damit und meldest dich, wenn du konkrete Probleme hast.

Im wesentlichen:
  • Die benutzen dort einen eigenen ListAdapter, der das Filtern auf eine Liste unterstützt. (sinnvoll oder?)
  • Die AnimalNames Klasse kannst du löschen und stattdessen überall String benutzen wo diese benutzt wird. Besser wäre es jedoch wirklich wie dort gezeigt eine Klasse für deine Listenelemente zu erstellen: Also so wie dort gezeigt nur mit auf deinen Kontext angepasste Namen.
 
Zuletzt bearbeitet:
Hab den Code mit der Anleitung:
mal angepasst. Ich habe auch eine menu_search.xml angelegt, aber die wird mir nicht angezeigt. Wie bekomme ich die menu in die activity_main.xml eingebunden?

Code:
package com.example.customlistview;


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SearchView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    String[] mArray = {};
    ArrayAdapter<String> mAdapter;
    ListView listView;
    Button but_zu_codes;




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

        but_zu_codes = (Button) findViewById(R.id.codes);
        but_zu_codes.setOnClickListener(this);

        mArray = new String[] {"B0562","B0563","B1004","B1005","B1006"};
        listView = (ListView) findViewById(R.id.listView);

     /*   mAdapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_list_item_1,
                getResources().getStringArray(R.array.tr_codes));
*/

        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mArray);
        listView.setAdapter(mAdapter);

      /* mAdapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_list_item_1,
                getResources().getStringArray(R.array.tr_codes));
    */


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(MainActivity.this, ListActivity.class);
                intent.putExtra("TroubleCodes", listView.getItemAtPosition(i).toString());
                startActivity(intent);

            }
        });
        listView.setAdapter(mAdapter);

    }
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.menu_search, menu);

        MenuItem menuItem = menu.findItem(R.id.search_badge_ID);

        SearchView searchView = (SearchView) menuItem.getActionView();
        searchView.setOnQueryTextListener (new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                mAdapter.getFilter().filter(s);
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
}


    @Override
    public void onClick(View v) {

        if (v.getId() == R.id.codes) {
            Intent weiter = new Intent(MainActivity.this, MainActivity.class);
            startActivity(weiter);
        }
    }
}

menu_search.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    xmlns:android="http://schemas.android.com/apk/es-auto">
    <item
        android:id="@+id/search_badge_ID"

        android:icon="@android:drawable/ic_menu_search"
        app:actionViewClass="android.widget.SearchView"
        app:showAsAction="always"

        android:title="Search hier" />
</menu>
 

looparda

Top Contributor
Wann wird menu_search denn eingebunden?
Genau, in onCreateOptionsMenu.
Java:
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.menu_search, menu);
Wird der Code dort ausgeführt? Wie lässt sich das überprüfen? Wenn der Code nicht ausgeführt wird - wieso nicht?

Überlegung, die du angehen könntest: Mir gefällt mir der Ansatz aus dem Video die ActionBar zu nutzen (ich weiß jedoch nicht ob Android das empfiehlt). Allerdings nicht, dass einfach alles an Logik in die Activity gepackt wird - das ist keine Trennung von Zuständigkeiten. Der eigene Adapter ist in dieser Hinsicht besser aufgestellt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Android Probleme mit BLE-Notify Android & Cross-Platform Mobile Apps 2
J Android Probleme mit der Realm Datenbank Android & Cross-Platform Mobile Apps 3
J Android Probleme mit Navigation-Fragments? Android & Cross-Platform Mobile Apps 0
N Probleme mit custom dynamic ListView Android & Cross-Platform Mobile Apps 15
B Android Probleme mit Android Studio Android & Cross-Platform Mobile Apps 6
B Android Probleme mit Realm Datenbank Android & Cross-Platform Mobile Apps 2
B Android Probleme mit ArrayList Android & Cross-Platform Mobile Apps 6
J Android Probleme mit FileProvider Android & Cross-Platform Mobile Apps 1
B Probleme mit Firebase Authentication Android & Cross-Platform Mobile Apps 25
ATZENPOWER Android Probleme mit mobilen Daten via lte Android & Cross-Platform Mobile Apps 10
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
B Android Probleme mit RealmObject? Android & Cross-Platform Mobile Apps 1
M Android ExpandableListView merkwürdige Probleme Android & Cross-Platform Mobile Apps 20
F Probleme mit Google-Maps Android & Cross-Platform Mobile Apps 0
B Android Probleme mit ViewPager? Android & Cross-Platform Mobile Apps 5
J Probleme mit ViewPager und Activity Android & Cross-Platform Mobile Apps 1
B Android Probleme mit Eclipse? Android & Cross-Platform Mobile Apps 6
E MAVLINK Probleme Android & Cross-Platform Mobile Apps 1
C Android Probleme mit JavaMail Android & Cross-Platform Mobile Apps 5
B Android Probleme mit Facebook-SDK? Android & Cross-Platform Mobile Apps 1
D Android Probleme mit info/warning (1, 902) Android & Cross-Platform Mobile Apps 4
D Android Gallery Probleme Android & Cross-Platform Mobile Apps 3
B Probleme mit App auf Galaxy S3? Android & Cross-Platform Mobile Apps 13
S Hat der AVD-Manager Probleme mit GPS? Android & Cross-Platform Mobile Apps 5
P Probleme mit xml-Layout Android & Cross-Platform Mobile Apps 2
P Android Probleme mit Spinner Android & Cross-Platform Mobile Apps 3
F Layout mit listViews (Scrolling-Probleme) Android & Cross-Platform Mobile Apps 2
A Android Probleme mit Dialog Android & Cross-Platform Mobile Apps 4
U SQLite-Datenbank Probleme Android & Cross-Platform Mobile Apps 8
T Android Probleme bei Facebook Integration Android & Cross-Platform Mobile Apps 5
tfa Android Layout-Probleme: View programmatisch erweitern (addContentView) Android & Cross-Platform Mobile Apps 7
A Probleme mit ListView / ArrayAdapter Android & Cross-Platform Mobile Apps 3
A Probleme mit Form.isShown Android & Cross-Platform Mobile Apps 9
A Probleme mit Calendar auf dem Handy Android & Cross-Platform Mobile Apps 3
U Probleme mit der drawString Methode bei Canvas Android & Cross-Platform Mobile Apps 8
P Probleme mit dem Deployment Android & Cross-Platform Mobile Apps 3
P Probleme mit Streams Android & Cross-Platform Mobile Apps 4
C 2 kleine Probleme (Datei lesen, String durchsuchen) Android & Cross-Platform Mobile Apps 16
G Proguard Obfuscator macht Probleme Android & Cross-Platform Mobile Apps 2
P Probleme mit RMS Android & Cross-Platform Mobile Apps 5
W Picasso in ArrayAdapter Android & Cross-Platform Mobile Apps 13
J ArrayAdapter zeigt Liste nicht an Android & Cross-Platform Mobile Apps 0
H Android ArrayList <-> ArrayAdapter <-> ListView Android & Cross-Platform Mobile Apps 10
S Android ListFragment & ArrayAdapter - Button-Werte werden vergessen Android & Cross-Platform Mobile Apps 0
W Android Bestimmen von welchem Typ die Objekte in einem ArrayAdapter sind Android & Cross-Platform Mobile Apps 3
P Android Sort Methode von ArrayAdapter überschreiben Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben