Liste durchsuchen

  • Antworten:0
seaside
  • Forum-Beiträge: 5

27.05.2013, 15:40:25 via Website

Hallo zusammen,

ich möchte eine App schreiben, in der eine Liste angezeigt wird, darüber ein EditText Feld und gegebenenfalls ein suchen Button.
Für die Liste habe ich mir einen eigene Struktur (String name und String grad) erstellt. Ich möchte jetzt über das Text Feld nach "name" suchen können. Da ich aber ein absoluter Neuling in der Android Programmierung bin weiß ich nicht wie der beste Weg dazu aussieht.
Habe es vorhin mit einem Textwatcher ausprobiert jedoch ohne Erfolg.

order.java
1public class Order {
2
3 private String name;
4 private String grad;
5
6 public Order(String _name, String _grad){
7 this.name = _name;
8 this.grad = _grad;
9 }
10
11 public String getName(){
12 return name;
13 }
14
15 public String getGrad(){
16 return grad;
17 }
18
19
20}

activity_main.xml
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7
8 <EditText
9 android:id="@+id/EditText"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:hint="@string/suchen"
13 android:inputType="text"
14 android:maxLines="1" />
15 <Button
16 android:id="@+id/Button"
17 android:layout_width="wrap_content"
18 android:layout_height="wrap_content"
19 android:text="@string/suchen"
20 />
21<ListView
22 android:id="@+id/android:list"
23 android:layout_width="fill_parent"
24 android:layout_height="fill_parent"
25 />
26<TextView
27 android:id="@+id/android:empty"
28 android:layout_width="fill_parent"
29 android:layout_height="fill_parent"
30 android:text="@string/main_no_items"/>
31</LinearLayout>

row.xml
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout
3 android:layout_width="fill_parent"
4 android:layout_height="?android:attr/listPreferredItemHeight"
5 android:padding="6dip">
6
7 <LinearLayout
8 android:orientation="vertical"
9 android:layout_width="0dip"
10 android:layout_weight="1"
11 android:layout_height="fill_parent">
12 <TextView
13 android:id="@+id/toptext"
14 android:layout_width="fill_parent"
15 android:layout_height="0dip"
16 android:layout_weight="1"
17 android:gravity="center_vertical"
18 />
19 <TextView
20 android:id="@+id/bottomtext"
21 android:layout_width="fill_parent"
22 android:layout_height="0dip"
23 android:layout_weight="1"
24 android:singleLine="true"
25 android:ellipsize="marquee"
26 />
27 </LinearLayout>
28</LinearLayout>

1import java.util.ArrayList;
2
3import android.os.Bundle;
4import android.app.Activity;
5import android.app.ListActivity;
6import android.app.ProgressDialog;
7import android.content.Context;
8import android.text.Editable;
9import android.text.TextWatcher;
10import android.util.Log;
11import android.view.LayoutInflater;
12import android.view.Menu;
13import android.view.View;
14import android.view.View.OnClickListener;
15import android.view.ViewGroup;
16import android.widget.AdapterView;
17import android.widget.AdapterView.OnItemClickListener;
18import android.widget.ArrayAdapter;
19import android.widget.Button;
20import android.widget.EditText;
21import android.widget.TextView;
22
23public class MainActivity extends ListActivity {
24
25 private ProgressDialog m_ProgressDialog = null;
26 private ArrayList<Order> m_orders = null;
27 private OrderAdapter m_adapter;
28 private Runnable viewOrders;
29
30 @Override
31 protected void onCreate(Bundle savedInstanceState) {
32 super.onCreate(savedInstanceState);
33 setContentView(R.layout.activity_main);
34
35 m_orders = new ArrayList<Order>();
36 this.m_adapter = new OrderAdapter(this, R.layout.row, m_orders);
37 setListAdapter(this.m_adapter);
38
39 EditText button = (EditText) findViewById(R.id.EditText);
40 // button.setOnClickListener(this);
41 // m_adapter.getFilter().filter(s);
42
43 TextWatcher filterTextWatcher = new TextWatcher() {
44
45 @Override
46 public void afterTextChanged(Editable s) {
47 }
48
49 public void beforeTextChanged(CharSequence s, int start, int count,
50 int after) {
51 }
52
53 public void onTextChanged(CharSequence s, int start, int before,
54 int count) {
55 m_adapter.getFilter().filter(s);
56 }
57 };
58 button.addTextChangedListener(filterTextWatcher);
59
60 viewOrders = new Runnable() {
61 @Override
62 public void run() {
63 init();
64 }
65 };
66 Thread thread = new Thread(null, viewOrders, "MagentoBackground");
67 thread.start();
68 m_ProgressDialog = ProgressDialog.show(MainActivity.this,
69 "Please wait...", "Retrieving data ...", true);
70 }
71
72 private Runnable returnRes = new Runnable() {
73
74 @Override
75 public void run() {
76 if (m_orders != null && m_orders.size() > 0) {
77 m_adapter.notifyDataSetChanged();
78 for (int i = 0; i < m_orders.size(); i++)
79 m_adapter.add(m_orders.get(i));
80 }
81 m_ProgressDialog.dismiss();
82 m_adapter.notifyDataSetChanged();
83 }
84 };
85
86
87 @Override
88 public boolean onCreateOptionsMenu(Menu menu) {
89 // Inflate the menu; this adds items to the action bar if it is present.
90 getMenuInflater().inflate(R.menu.activity_main, menu);
91 return true;
92 }
93
94 public void init() {
95 try {
96 m_orders = new ArrayList<Order>();
97 m_orders.add(new Order("eins", "keine"));
98 m_orders.add(new Order("zwei", "keine"));
99 m_orders.add(new Order("drei", "keine"));
100 m_orders.add(new Order("vier", "keine"));
101
102 Thread.sleep(2000);
103 Log.i("ARRAY", "" + m_orders.size());
104 } catch (Exception e) {
105 Log.e("BACKGROUND_PROC", e.getMessage());
106 }
107 runOnUiThread(returnRes);
108 }
109
110 private class OrderAdapter extends ArrayAdapter<Order> {
111
112 private ArrayList<Order> items;
113
114 public OrderAdapter(Context context, int textViewResourceId,
115 ArrayList<Order> items) {
116 super(context, textViewResourceId, items);
117 this.items = items;
118 }
119
120 @Override
121 public View getView(int position, View convertView, ViewGroup parent) {
122 View v = convertView;
123 if (v == null) {
124 LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
125 v = vi.inflate(R.layout.row, null);
126 }
127 Order o = items.get(position);
128 if (o != null) {
129 TextView tt = (TextView) v.findViewById(R.id.toptext);
130 TextView bt = (TextView) v.findViewById(R.id.bottomtext);
131 if (tt != null) {
132 tt.setText("Name: " + o.getName());
133 }
134 if (bt != null) {
135 bt.setText("Grad: " + o.getGrad());
136 }
137 }
138 return v;
139 }
140 }
141
142}

Antworten