2012-04-12 1 views
0

Dieses Problem, dass das Listview nicht angezeigt wird, scheint sehr seltsam zu sein. Lassen Sie mich zuerst meine Funktionscodes in der Aktivität posten: geschütztes ListView mListView;ListView wird nicht angezeigt, obwohl ListViews getCount() ordnungsgemäß funktioniert

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.result);  
    mListView = (ListView)this.findViewById(R.id.wrdList); 

    handleIntent(getIntent()); 
} 

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String word = intent.getStringExtra(SearchManager.QUERY); 
     //use the query to search your data somehow 

     //Columns to be selected in database 
     String sel[] = {"_id", "wort", DictDBHelper.get2LtrLang()}; 
     Cursor SrhRet = mSrhHelper.searchWord(word, sel); 
     //Columns to be showed in ListView 
     String col[] = {"wort", DictDBHelper.get2LtrLang()}; 
     showList(SrhRet, col); 
     SrhRet.close(); 
    } else if (Intent.ACTION_VIEW.equals(intent.getAction())) { 

    } 
} 

/* 
* Set the TextView to print how many words are found in database 
*/ 
protected void setCount(int count) { 
    TextView tv = (TextView)this.findViewById(R.id.wrdCount); 
    tv.setText(String.valueOf(count)); 
} 

/* 
* Set the adapter to show the list 
* First parameter specifies the cursor of rows to be shown in ListView 
* Second one specifies columns 
*/ 
protected void showList(final Cursor SrhRet, String[] from) { 

    int[] to = new int[]{R.id.entry, R.id.detail}; 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      R.layout.listitem, SrhRet, from, to, 
      CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 
    mListView.setAdapter(adapter); 
    setCount(mListView.getCount()); 

    mListView.setOnItemClickListener(new OnItemClickListener(){   
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // Build the Intent used to open WordActivity with a specific word Uri 
      Intent wordIntent = new Intent(getApplicationContext(), WordActivity.class); 
      Uri data = Uri.withAppendedPath(DictionaryProvider.ENTRY_CONTENT_URI, 
              String.valueOf(id)); 
      wordIntent.setData(data); 
      //Required by the update 
      SrhRet.close(); 
      mSrhHelper.updateHist(id); 
      startActivity(wordIntent); 
     } 
    }); 
} 

Dies sind Funktionen, die eine Eingabe in durchsuchbar behandelt. Ich habe alle beteiligten Variablen ausfindig gemacht, aber kaum etwas Abnormales gefunden. Aber jedes Mal, wenn ich diese Funktion ausprobiere, zeigt der TextView die richtigen Zahlen, die ListView enthalten sollte! Diese Funktionen funktionierten perfekt vorher und ich habe eine andere Aktivität, die von dieser abgeleitet wird, ruft diese Funktionen auf, die auch gut funktionieren.

Ich benutze listitem.xml als Inhalt in Listview Stück:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
<TextView 
    android:id="@+id/entry" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:textSize="17dp" /> 
<TextView 
    android:id="@+id/detail" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" /> 

Und mein result.xml. Ich habe die Ausrichtung überprüft.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 
<TextView 
    android:id="@+id/wrdCount" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" /> 
<ListView 
    android:id="@+id/wrdList" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" /> 
</LinearLayout> 

Vielen Dank für Hilfe im Voraus!

+0

Allgemeine Informationen, verwenden Sie fill_parent anstelle von match_parent. match_parent wird heutzutage nicht mehr verwendet und verursacht in einigen APIs Fehler. Versuchen Sie auch Cursor ShrRet eine globale Variable zu machen – Shubhayu

+0

@Shubhayu Ich entwickelte unter api15, also glaube ich nicht, dass dies eine Rolle spielt. Und ich habe es versucht. Es funktioniert auch nicht. – Hypeboyz

+0

Gibt es irgendwelche Fehler oder sehen Sie nur eine leere Liste? – Shubhayu

Antwort

0

Ich denke, Ihr Problem ist das: SrhRet.close(); in Ihrer handleIntent(Intent intent) Methode.

Versuchen Sie, den Cursor in der onDestroy() Methode der Aktivität zu schließen.

+0

Um den Cursor zu schließen, soll die Tabelle geändert werden. Diese Close-Funktion wird aufgerufen, solange ich auf Element geklickt habe. Ich glaube nicht, dass dies verhindert, dass die Listenansicht angezeigt wird. Oder, selbst wenn, warum gibt mein getCount() korrekt zurück? @Deucalion – Hypeboyz

+0

showList (SrhRet, col); und ShrRet.close() ;. Sie rufen den getCount() in showList (...) auf. Und danach schließen Sie den Cursor. – Blehi

+0

Es funktioniert immer noch nicht. Diese Funktion ist in onXXListener enthalten, anstatt linear ausgeführt zu werden. Aber danke für deinen Rat – Hypeboyz