2010-09-15 5 views
11

Salut, je suis nouveau dans Android. Quelqu'un pourrait-il me dire pls quel est le problème avec le code suivant:Créer ListView par programme

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

D'une part, vous n'utilisez pas correctement le constructeur ArrayAdapter. vous voulez utiliser la version à deux paramètres: (Context context, int textViewResourceId) – moonlightcheese

+0

comme ceci: ArrayAdapter lAdap = new ArrayAdapter (this, lText.getId()); – moonlightcheese

Répondre

0
public class ListApp extends ListActivity 
+0

Pourrais-je ajouter un formulaire ListView Activity. Je ne veux pas hériter de ListActiviy. C'est possible? – ashraf

+0

J'ai le même problème, le portage d'un projet de l'iPhone et Blackberry et en utilisant XML d'Android est une refonte ... argh. S'il est facile de créer ces choses de manière procédurale, cela rendrait la vie tellement plus facile et semblerait que cela devrait être possible, mais bon je suis encore nouveau sur Android :) – sradforth

0

Faire un fichier XML de mise en page avec votre listview et utiliser findViewById pour définir son adaptateur après la première mise en l'affichage du contenu de votre mise en page

3

Essayez ceci ..

Collez le code suivant dans 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> 

Voici la classe d'activité ....

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

La meilleure pratique consiste à séparer vue (mise en page xml) et contrôleur (activité).

Si vous ne voulez pas, essayez de mettre

setContentView(lView); 

au début de onCreate

18

est ici une solution qui ne nécessite pas d'écrire des mises en page XML. il utilise des mises en page android standard lorsque cela est possible et aucune inflation n'est nécessaire:

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

ignorer les choses de dialogue. vous pouvez aussi adapter cela pour travailler avec un ListActivity. – moonlightcheese

+0

cela devrait être marquer comme la bonne réponse –

Questions connexes