2010-09-15 15 views
11

Witam Jestem nowy w systemie Android. Czy ktoś może mi powiedzieć pls co jest źle z następującego kodu:Utwórz program ListView programowo

public class ListApp extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView lText = new TextView(this); 
     lText.setId(0);  

     ListView lView = new ListView(this); 
     String[] lStr = new String[]{"AA","BB", "CC"}; 
     ArrayAdapter lAdap = new ArrayAdapter(this,lText.getId(),lStr); 
     lView.setAdapter(lAdap); 
     lView.setFocusableInTouchMode(true);   

     setContentView(lView); 
    } 
} 
+0

Po pierwsze, niepoprawnie używasz konstruktora ArrayAdapter. chcesz użyć wersji z dwoma parametrami: (Kontekst kontekstowy, int textViewResourceId) – moonlightcheese

+0

podobnie jak: ArrayAdapter lAdap = new ArrayAdapter (this, lText.getId()); – moonlightcheese

Odpowiedz

0
public class ListApp extends ListActivity 
+0

Czy mogę dodać aktywność formularza ListView. Nie chcę dziedziczyć z ListActiviy. Czy to możliwe? – ashraf

+0

Mam ten sam problem, przenoszenie projektu z iPhone'a i Blackberry, a używanie XML w Androidzie to przeprojektowanie ... argh. Jeśli jest to łatwe do proceduralnego tworzenia tych rzeczy, to znacznie ułatwiłoby życie i wygląda na to, że powinno być możliwe, ale hej, wciąż jestem nowy w systemie Android :) – sradforth

0

stworzyć plik XML układ z ListView i wykorzystać findViewById ustawić to adapter po pierwszym ustawieniu widoku zawartości do układu

3

Wypróbuj to ..

Wklej następujący kod w pliku list_item.xml.

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:textSize="16sp" android:textColor="#ffffff" android:textStyle="bold" android:background="@drawable/border_cell"> 
</TextView> 

Oto klasa aktywność ....

public class UsersListActivity extends ListActivity{  
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState);   
      String[] statesList = {"listItem 1", "listItem 2", "listItem 3"}; 
      setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, 
        statesList)); 
      ListView lv = getListView(); 

      lv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 


        Toast.makeText(getApplicationContext(), 
        "You selected : "+((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
    } 
      }); 

     } 

} 
1

Najlepsza praktyka jest oddzielenie widoku (układ xml) i regulator (aktywności).

Jeśli nie chcesz, spróbuj umieścić

setContentView(lView); 

na początku onCreate

18

oto rozwiązanie, które nie wymaga żadnych układów napisać xml. w miarę możliwości wykorzystuje standardowe układy Androida i nie jest wymagana żadna inflacja:

Dialog dialog = new Dialog(this); 
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Select Color Mode"); 

ListView modeList = new ListView(this); 
String[] stringArray = new String[] { "Bright Mode", "Normal Mode" }; 
ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, stringArray); 
modeList.setAdapter(modeAdapter); 

builder.setView(modeList); 
dialog = builder.create(); 
+2

zignoruj ​​treść okna dialogowego. możesz to również dostosować do pracy z ListActivity. – moonlightcheese

+0

powinno to być oznaczenie jako poprawna odpowiedź –

Powiązane problemy