Aplicația se blochează la deschiderea unei clase care conține un ListView

Am următoarea clasă care, după cum puteți vedea, conține un text EditText, Buton și o listă. Vreau ca utilizatorul să introducă textul EditText, să facă clic pe Căutare și să afișeze rezultatele

SQLite database in the list below the button/edittext field.
public class FindOrder  extends ListActivity {
private List arr;
private ListView listView;
Button search;
EditText search_field;
String search_val;
SQLiteDatabase db = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.find_order);
   //TODO Auto-generated method stub
    Log.e("myTag","in func");
    search = (Button) findViewById(R.id.search_button);
    search_field = (EditText) findViewById(R.id.search_field);
    search.setOnClickListener(  
            new View.OnClickListener() {
                public void onClick(View view) {
                    search_val=search_field.getText().toString();
                    //getOrder(search_val);

                }
            });
}

public void getOrder(String val) {
    Log.e("myTag","in func");
    String query;
    String[] s_arr = new String[1];
    listView = (ListView) findViewById(R.id.listView);
    ArrayAdapter adapter;
    arr = new ArrayList();
    db =  this.openOrCreateDatabase( "DBname", MODE_PRIVATE, null);
    query="SELECT OrderName, OrderLink, DateYear, DateMonth, DateDay, OrderPrice FROM Orders where OrderName=?";
    s_arr[0]=val;
    Cursor c = db.rawQuery(query, s_arr);
    if (c != null ) {
       if  (c.moveToFirst()) {
           do {     
               arr.add(c.getString(c.getColumnIndex(DatabaseHelper.colName)));
               Log.e("myTag",c.getString(c.getColumnIndex(DatabaseHelper.colName)));
           } while (c.moveToNext());
       }
   } 
   c.close();
  //setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,arr));
  adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, arr);
  listView.setAdapter(adapter);
  TextView textview = new TextView(this);
  LinearLayout ll2 = (LinearLayout)findViewById(R.id.linearLayout2);
  ll2.addView(textview);

}
}

În prezent, ori de câte ori fac clic pe butonul din Meniul Principal care conduce la această activitate, obțin un FC. Una dintre erorile pe care le pot vedea i jurnalul este:

06-02 10:32:18.387: E/AndroidRuntime(1904): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Sagi.MyOrders/com.Sagi.MyOrders.FindOrder}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

Together with many other errors . But i couldn't really understand why should i have .list attribute ...

XML:

<?xml version="1.0" encoding="utf-8"?>

    
        
        
        <button
            android:id="@+id/search_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Search" />
    
    
    
    

Vă mulțumim!

0

4 răspunsuri

Solution1: in xml file change the id of listview


și, de asemenea, în tine codul schimba această listă listView = (ListView) findViewById (R.id.listView); la fel de

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

Solution2:

Activitatea dvs. trebuie să extindă activitatea în locul funcției ListActivity.

0
adăugat

your listview id must be android:id="@android:id/list" when you extends ListActivity to your Activity.

           
0
adăugat
Am încercat, dacă schimbăm acolo, trebuie să schimb și codul Java și am același FC. Numele din xml nu ar trebui să se schimbe din moment ce îl tratez ...
adăugat autor SagiLow, sursa
Apoi puneți logat-ul dvs. după id-ul de vizualizare listă modificat ...
adăugat autor Samir Mangroliya, sursa
Nu știu dacă acest lucru deja a fost rezolvat sau nu, dar pot da opinii: adăugați neintenționat importul android.R ?
adăugat autor rudy s, sursa

doar modificați această linie în fișierul xml unde declarați listview.

android:id="@android:id/list" 

Nu este nevoie să declarați lista. Încercați codul de mai jos.

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);

Verificați exemplul de mai jos.

public class MyListActivity extends ListActivity {
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };
        ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, values);
        setListAdapter(adapter);
    }
}
0
adăugat
Deci, ce ar trebui să obțină următoarea linie: listView = (ListView) findViewById (???)
adăugat autor SagiLow, sursa
Eliminat, nu FC ... dar lista nu a apărut, înregistrările sunt interogate ... dar nu apare nimic.
adăugat autor SagiLow, sursa
Răul meu, Lucrul minunat. Mulțumiri !
adăugat autor SagiLow, sursa
eliminați acest lucru pe măsură ce vă prelungiți ListActivity.
adăugat autor Chirag Raval, sursa
ai valori de la cursor? încercați să înregistrați valoarea respectivă.
adăugat autor Chirag Raval, sursa

schimbați ID-ul vizualizării listei în fișierul xml android: id = "@ android: id/list"

și în codul java,

you have used listView = (ListView) findViewById(R.id.listView)
change that to listView = this.getListView()

0
adăugat
Android dezvoltatori, România — Moldova
Android dezvoltatori, România — Moldova
27 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro iOS: @ro_ios Reguli: https://github.com/js-ro/it-telegram/blob/master/RULES.md