Comment mettre à jour dynamiquement un ListView avec adaptateur personnalisé?
J'ai une activité principale qui crée un ListView
et un Custom Adapter
. Je suis en mesure de remplir la ListView
si j'ai la Liste déjà créé auparavant, mais comment dois-je remplir avec dynamiquement des données extraites?
MainActivity
public class MainActivity extends Activity {
private ListView myListView;
private Context ctx;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MainActivity);
ctx = this;
List<Items> myList = new ArrayList<Items>();
myList.add(new Item("Name 1", "Desc 1"));
myList.add(new Item("Name 2", "Desc 2"));
myList.add(new Item("Name 3", "Desc 3"));
myList.add(new Item("Name 4", "Desc 4"));
myList.add(new Item("Name 5", "Desc 5"));
myListView = (ListView)findViewById(R.id.list);
MyListAdapter myAdapter = new MyListAdapter(ctx,R.layout.listitem, myList);
myListView.setAdapter(myAdapter);
}
}
MyListAdapter
public class MyListAdapter extends ArrayAdapter<Items> {
private int resource;
private LayoutInflater mLayoutInflater;
public MyListAdapter ( Context ctx, int resourceId, List<Items> objects) {
super( ctx, resourceId, objects );
resource = resourceId;
mLayoutInflater = LayoutInflater.from( ctx );
}
@Override
public View getView ( int position, View convertView, ViewGroup parent ) {
convertView = ( RelativeLayout ) mLayoutInflater.inflate( resource, null );
Items item = (Items) getItem( position );
TextView txtName = (TextView) convertView.findViewById(R.id.listName);
txtName.setText(item.getName());
TextView txtDesc = (TextView) convertView.findViewById(R.id.listDescription);
txtDesc.setText(item.getDesc());
return convertView;
}
}
Élément
public class Item {
private String name;
private String desc;
public Item(String name, String desc) {
super();
this.name = name;
this.desc = desc;
}
//getters and setters
}
Comment puis-je modifier mon code tel qu'une fonction dans le fond récupère les éléments de la coutume adaptateur et remplit la liste? J'ai essayé d'utiliser un AsyncTask
mais ne parvenais pas à le faire fonctionner.
Modifier: Ajout de la AsyncTask
dans MainActivity
après onCreate()
juste pour tester des choses. Il travaille pour que je puisse voir le comptage de 1 à 5 puis fait.
Comment puis-je obtenir le AsyncTask
de mettre à jour ma carte et ListView
si?
Ce qui devrait onCreate()
passer à la AsyncTask
et ce qui devrait AsyncTask
retour?
private class GetItems extends AsyncTask<Void, Integer, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
TextView myMsg = (TextView)findViewById(R.id.topMsg);
myMsg.setText("Loading...");
}
@Override
protected Void doInBackground(Void... params) {
TextView myMsg = (TextView)findViewById(R.id.topMsg);
for (int i=1;i<=5;i++) {
try {
Thread.sleep(1000);
publishProgress(i);
} catch (InterruptedException e) {
}
}
return null;
}
protected void onProgressUpdate(Integer... values) {
TextView myMsg = (TextView)findViewById(R.id.topMsg);
myMsg.setText(Integer.toString(values[0].intValue()));
}
@Override
protected void onPostExecute(Void result) {
TextView myMsg = (TextView)findViewById(R.id.topMsg);
myMsg.setText("Done!");
}
}
J'ai ajouté une AsyncTask pour le code original. Cependant, je ne suis pas sûr de la façon de mettre à jour la carte et de la liste.
OriginalL'auteur user1118764 | 2013-08-23
Vous devez vous connecter pour publier un commentaire.
Chaque fois que vous ajoutez de nouvelles données, vous devez faire ceci:
Par exemple:
OU:
OriginalL'auteur oybek.t
Après la mise à jour de votre carte d'appel
Cela permettra de mettre à jour dynamiquement l'affichage de la liste.
Voir ce pour plus d'info LIEN
OriginalL'auteur Rajnish Mishra
J'ai essayé la méthode la plus simple pour mettre à jour la liste lorsque vous supprimez un élément de celui-ci. Espérons donc mon code pourrait vous aider.
Code
OriginalL'auteur Usama Mudassar