Quelqu'un peut-il expliquer ou suggérer un tutoriel pour créer un listView dans Android?
Voici mes exigences:
Je sais qu'il y a pas mal de questions sur ce sujet, postées ici sur StackOverflow, mais je n'en ai trouvé aucune qui réponde à ma question. Merci!
Créez d'abord une mise en page XML dans le dossier res/layout/main.xml
de votre projet:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<Button
Android:id="@+id/addBtn"
Android:text="Add New Item"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:onClick="addItems"/>
<ListView
Android:id="@Android:id/list"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:drawSelectorOnTop="false"
/>
</LinearLayout>
Il s’agit d’une disposition simple avec un bouton en haut et une vue liste en bas. Notez que la ListView
a l'id @Android:id/list
qui définit la valeur par défaut ListView
et ListActivity
.
public class ListViewDemo extends ListActivity {
//LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
ArrayList<String> listItems=new ArrayList<String>();
//DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW
ArrayAdapter<String> adapter;
//RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED
int clickCounter=0;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
adapter=new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1,
listItems);
setListAdapter(adapter);
}
//METHOD WHICH WILL HANDLE DYNAMIC INSERTION
public void addItems(View v) {
listItems.add("Clicked : "+clickCounter++);
adapter.notifyDataSetChanged();
}
}
Android.R.layout.simple_list_item_1
est la disposition par défaut des éléments de liste fournie par Android, et vous pouvez utiliser cette disposition d'origine pour les éléments non complexes.
listItems
est une liste qui contient les données affichées dans ListView. Toutes les opérations d’insertion et de retrait doivent être effectuées sur listItems
; les changements dans listItems
devraient être reflétés dans la vue. Ceci est géré par ArrayAdapter<String> adapter
, qui devrait être notifié par:
adapter.notifyDataSetChanged();
Un adaptateur est instancié avec 3 paramètres: le contexte, qui pourrait être votre activity/listactivity
; la mise en page de votre élément de liste individuel; et enfin, la liste, qui représente les données réelles à afficher dans la liste.
au lieu de
listItems.add("New Item");
adapter.notifyDataSetChanged();
vous pouvez appeler directement
adapter.add("New Item");
Tout d'abord, vous devez ajouter un ListView, un EditText et un bouton dans votre activity_main.xml.
Maintenant, dans votre ActivityMain:
private EditText editTxt;
private Button btn;
private ListView list;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTxt = (EditText) findViewById(R.id.editText);
btn = (Button) findViewById(R.id.button);
list = (ListView) findViewById(R.id.listView);
arrayList = new ArrayList<String>();
// Adapter: You need three parameters 'the context, id of the layout (it will be where the data is shown),
// and the array that contains the data
adapter = new ArrayAdapter<String>(getApplicationContext(), Android.R.layout.simple_spinner_item, arrayList);
// Here, you set the data in your ListView
list.setAdapter(adapter);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// this line adds the data of your EditText and puts in your array
arrayList.add(editTxt.getText().toString());
// next thing you have to do is check if your adapter has changed
adapter.notifyDataSetChanged();
}
});
}
Cela fonctionne pour moi, j'espère vous avoir aidé
Si vous souhaitez avoir le ListView dans une AppCompatActivity au lieu de ListActivity, vous pouvez procéder comme suit (modification de la réponse de @ Shardul):
public class ListViewDemoActivity extends AppCompatActivity {
//LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
ArrayList<String> listItems=new ArrayList<String>();
//DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW
ArrayAdapter<String> adapter;
//RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED
int clickCounter=0;
private ListView mListView;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_list_view_demo);
if (mListView == null) {
mListView = (ListView) findViewById(R.id.listDemo);
}
adapter=new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1,
listItems);
setListAdapter(adapter);
}
//METHOD WHICH WILL HANDLE DYNAMIC INSERTION
public void addItems(View v) {
listItems.add("Clicked : "+clickCounter++);
adapter.notifyDataSetChanged();
}
protected ListView getListView() {
if (mListView == null) {
mListView = (ListView) findViewById(R.id.listDemo);
}
return mListView;
}
protected void setListAdapter(ListAdapter adapter) {
getListView().setAdapter(adapter);
}
protected ListAdapter getListAdapter() {
ListAdapter adapter = getListView().getAdapter();
if (adapter instanceof HeaderViewListAdapter) {
return ((HeaderViewListAdapter)adapter).getWrappedAdapter();
} else {
return adapter;
}
}
}
Et dans votre mise en page au lieu d'utiliser Android:id="@Android:id/list"
, vous pouvez utiliser Android:id="@+id/listDemo"
Alors maintenant, vous pouvez avoir un ListView
dans un AppCompatActivity
normal.
Code du fichier MainActivity.Java.
public class MainActivity extends Activity {
ListView listview;
Button Addbutton;
EditText GetValue;
String[] ListElements = new String[] {
"Android",
"PHP"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listView1);
Addbutton = (Button) findViewById(R.id.button1);
GetValue = (EditText) findViewById(R.id.editText1);
final List < String > ListElementsArrayList = new ArrayList < String >
(Arrays.asList(ListElements));
final ArrayAdapter < String > adapter = new ArrayAdapter < String >
(MainActivity.this, Android.R.layout.simple_list_item_1,
ListElementsArrayList);
listview.setAdapter(adapter);
Addbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListElementsArrayList.add(GetValue.getText().toString());
adapter.notifyDataSetChanged();
}
});
}
}
Code du fichier de mise en forme activity_main.xml.
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.listviewaddelementsdynamically_Android_examples
.com.MainActivity" >
<Button
Android:id="@+id/button1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/editText1"
Android:layout_centerHorizontal="true"
Android:text="ADD Values to listview" />
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="26dp"
Android:ems="10"
Android:hint="Add elements listView" />
<ListView
Android:id="@+id/listView1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/button1"
Android:layout_centerHorizontal="true" >
</ListView>
</RelativeLayout>
ScreenShot