Bonjour. Je suis Wataku, un programmeur côté serveur qui étudie la programmation dans une certaine école. : détendu: Développons également Android cette fois. Puisqu'il existe différentes façons d'afficher des vues de liste sur Android, je suis moi-même devenu confus, alors j'aimerais dormir avec le diable.
○ Classe d'écouteur lorsque vous appuyez sur la vue de liste: ** onItemClickListener ** Implémentez l'interface. `` * Cette interface est une interface membre de la classe AdapterView '' ○ Méthode de paramétrage de la liste
setOnItemClickListener(Placez l'interface membre qui implémente onItemClickListener)
** 1) Gestionnaire d'événements: onItemClick () ** 4 arguments
1.AdapterView<?> parent
->L'ensemble de ListView exploité
2.View view
->Une ligne de pièces d'écran taraudées
3.int position
->Numéro de ligne sur écoute
* À partir de 0
4.long id
->Valeur de clé primaire lorsque ListView est généré en fonction des données de base de données
* Si DB n'est pas utilisé, la même valeur que la position ci-dessus
** 2) Acquisition de données ** ○ Les données de la ligne tapée peuvent être obtenues en utilisant le parent et la position.
(String)parent.getItemAtPosition(position)
private class ListItemClickListener implements AdapterView.OnItemClickListener {
public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
String item = (String)parent.getItemAtPosition(position);
Toast.makeText(ListClickSampleActivity.this, show, Toast.LENGTH_SHORT).show();
}
}
** 1) Créer avec xml **
activity_list_click_sample.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lvMenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/lv_menu"/>
string.xml
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<string name="app_name">Échantillon de sélection de liste</string>
<string-array name="lv_menu">
<item>Poulet frit</item>
<item>Repas de hamburger</item>
<item>Repas grillé au gingembre</item>
<item>Repas ensemble steak</item>
<item>Repas de légumes sautés</item>
<item>Repas de viande de pot de temps</item>
<item>Repas Mao Tofu</item>
<item>Repas de tonkatsu</item>
<item>Ensemble de côtelettes hachées</item>
<item>Poulet et plat</item>
<item>Repas de croquettes</item>
<item>Repas de poisson grillé</item>
<item>Repas de viande grillée</item>
<item>Viande faible et nourriture forte</item>
</string-array>
</resources>
ListClickSampleActivity.java
public class ListClickSampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_click_sample);
ListView lvMenu = findViewById(R.id.lvMenu);
lvMenu.setOnItemClickListener(ListItemClickListener);
}
AdapterView.OnItemClickListener ListItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
String item = (String)parent.getItemAtPosition(position);
String show = "Repas de votre choix:" + item;
Toast.makeText(ListClickSampleActivity.this, show, Toast.LENGTH_SHORT).show();
}
};
}
** 2) Créer avec du code Java **
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lvPref"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
PrefListActivity.java
public class PrefListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pref_list);
ListView lvPref = findViewById(R.id.lvPref);
List<String> prefList = createPrefectureList();
ArrayAdapter<String> adapter = new ArrayAdapter<>(PrefListActivity.this, android.R.layout.simple_list_item_1, prefList);
lvPref.setAdapter(adapter);
lvPref.setOnItemClickListener(new ListItemClickListener());
}
/**
*Une méthode pour générer une liste d'états.
* @return Objet de liste d'état.
*/
private List<String> createPrefectureList() {
List<String> prefList = new ArrayList<>();
prefList.add("Hokkaido");
prefList.add("Préfecture d'Aomori");
prefList.add("Préfecture d'Iwate");
prefList.add("Préfecture de Miyagi");
prefList.add("Akita");
prefList.add("Préfecture de Yamagata");
prefList.add("Préfecture de Fukushima");
prefList.add("Préfecture d'Ibaraki");
prefList.add("Préfecture de Tochigi");
prefList.add("Préfecture de Gunma");
prefList.add("Saitama");
prefList.add("Préfecture de Chiba");
prefList.add("Tokyo");
prefList.add("Préfecture de Kanagawa");
prefList.add("Préfecture de Niigata");
prefList.add("Préfecture de Toyama");
prefList.add("Préfecture d'Ishikawa");
prefList.add("Préfecture de Fukui");
prefList.add("Préfecture de Yamanashi");
prefList.add("Préfecture de Nagano");
prefList.add("Préfecture de Gifu");
prefList.add("Préfecture de Shizuoka");
prefList.add("Préfecture d'Aichi");
prefList.add("Préfecture de Mie");
prefList.add("Préfecture de Shiga");
prefList.add("Kyoto");
prefList.add("Préfecture d'Osaka");
prefList.add("Préfecture de Hyogo");
prefList.add("Préfecture de Nara");
prefList.add("Préfecture de Wakayama");
prefList.add("Préfecture de Tottori");
prefList.add("Préfecture de Shimane");
prefList.add("Préfecture d'Okayama");
prefList.add("Préfecture d'Hiroshima");
prefList.add("Préfecture de Yamaguchi");
prefList.add("Préfecture de Tokushima");
prefList.add("Préfecture de Kagawa");
prefList.add("Préfecture d'Ehime");
prefList.add("Préfecture de Kochi");
prefList.add("Préfecture de Fukuoka");
prefList.add("Préfecture de Saga");
prefList.add("Préfecture de Nagasaki");
prefList.add("Préfecture de Kumamoto");
prefList.add("Préfecture d'Oita");
prefList.add("Préfecture de Miyazaki");
prefList.add("Préfecture de Kagoshima");
prefList.add("Préfecture d'Okinawa");
return prefList;
}
/**
*Une classe membre qui décrit ce qui se passe lorsqu'une liste est sélectionnée.
*Transférez le processus sur le deuxième écran.
*/
private class ListItemClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String prefName = (String) parent.getItemAtPosition(position);
Intent intent = new Intent(PrefListActivity.this, PrefEditActivity.class);
intent.putExtra("selectedPrefNo", position);
intent.putExtra("selectedPrefName", prefName);
startActivity(intent);
}
}
}
Utilisez la classe ** SimpleCursorAdapter **. → À utiliser lorsque vous souhaitez créer une vue de liste basée sur les données du DB. 6 arguments
1.le contexte
2.Valeur R représentant la disposition de chaque ligne dans la vue liste
*simple_list_view_item_1 est généralement bon.
3.Objet curseur
4.String[] :Tableau de noms de colonnes
5.int[] :Disposition des valeurs R des parties d'écran
6.0 c'est bien
Comment afficher (enregistrer) ceci dans la vue de liste -> Utilisez la méthode ** setAdapter ** de la classe ListView
MemoListActivity.java
public class MemoListActivity extends AppCompatActivity {
private ListView _lvMemoList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memo_list);
_lvMemoList = findViewById(R.id.lvMemoList);
_lvMemoList.setOnItemClickListener(new ListItemClickListener());
}
@Override
protected void onResume() {
super.onResume();
DatabaseHelper helper = new DatabaseHelper(MemoListActivity.this);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = DataAccess.findAll(db);
String[] from = {"title"};
int[] to = {android.R.id.text1};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MemoListActivity.this, android.R.layout.simple_list_item_1, cursor, from, to, 0);
_lvMemoList.setAdapter(adapter);
}
}
`ʻOnResume: Méthode pour rafraîchir l'écran``
Utilisez ** SimpleAdapter **. row Pour personnaliser chaque ligne de la vue de liste, procédez comme suit: ** 1) Préparez un fichier de mise en page .xml pour une ligne ** -> Comment écrire un fichier xml est le même qu'un fichier de mise en page normal
res/layout/row.xml
<LinearLayout ... >
<ImageView ... />
<TextView ... />
<TextView ... />
<TextView ... />
</LinearLayout>
`` * Le nom de fichier peut être n'importe quoi ''
** 2) Spécifiez la valeur R du fichier en 1) dans l'argument qui spécifie la disposition lors de la création de l'adaptateur. ** **
(ex.)
new.SimpleAdapter( ..., _list, R.layout.row, ... );
** 3) Dans le tableau int de l'argument to lors de la création de la classe d'adaptateur, spécifiez la valeur R de id décrite dans le fichier de 1). ** **
(ex.)
int[] to = {R.id.tvMenuName, R.id.tvMenuPrice}
ViewBinder ** (1) Qu'est-ce que ViewBinder ** Vous pouvez utiliser `` row.xml pour personnaliser la mise en page qui précède la vue de liste. ''
Alors, comment changer le contenu d'affichage de chaque ligne en fonction des données?
Créez votre propre processus pour attribuer des données à des parties d'écran en combinant de à (création de ViewBinder), la procédure est la suivante.
** 1) Créez une classe qui implémente l'interface SimpleAdapter.ViewBinder. -> La classe de membre privé est bien **
** 2) Décrivez le processus d'allocation de données pour filtrer des parties dans la méthode setViewValue () de cette classe. (Voir ci-dessous) **
** 3) Passez une nouvelle version de cette classe à la méthode setViewBinder () de la classe adaptateur **
(ex.)
private class CustomViewBinder implement SimpleAdapter.ViewBinder {
@Override
public boolean setViewValue() {
Décrivez ici la répartition des données des parties d'écran dans chaque ligne
}
}
adapter.setViewBinder(new CustomViewBinder());
** (2) Argument de setViewValue () ** Les arguments de la méthode setViewValue () sont les trois suivants.
1. View view :Filtrer les pièces sur une seule ligne.
2. Object data :Les données à affecter au premier argument ci-dessus.
3. String textReprosentation :Une chaîne du contenu du deuxième argument. Si le deuxième argument est nul
Chaîne vide.
** (3) Modèle de traitement dans setViewValue () ** À l'intérieur de setViewValue (), branchez en utilisant l'id de la vue d'argument et décrivez le processus en utilisant les données d'argument. → L'instruction switch est pratique.
public booelan setViewValue ( .... ) {
int viewId = view.getId();← Obtenir l'identifiant
switch( viewId ) {← Traitement des branches selon id(switch)
case R . id . imPhoneType :← Valeur R car c'est une comparaison entre les identifiants
ImageView imPhoneType = ( ImageView ) view;
int phoneType = ( Integer ) data;
Alors fais ce que tu veux.
return true;
case .....
}
return false
}
Dans la méthode `` setViewValue (), décrivez le processus d'origine d'incorporation de données dans la vue, c'est-à-dire, décrivez return true à la fin de chaque cas. De plus, écrivez return false à la fin de la méthode. → Sur la base de cette valeur de retour, il est déterminé s'il faut incorporer ou non les données côté OS. ''
** (4) Pour SimpleCursorAdapter ** Même dans le cas de SimpleCursorAdapter, le traitement de setViewValue () de ViewBinder est le même que celui de SimpleAdapter.
view . getId()Branchez la valeur de avec un commutateur. Cependant, les arguments sont les trois suivants.
1. View view :Filtrer les parties sur une ligne de la liste.
2. Cursor cursor :Un objet curseur qui contient des données pour une ligne de la liste cible.
3. int columnIndex :L'index de colonne des données à affecter au premier argument ci-dessus.
Lorsque les données du DB qui sont les données d'origine de la vue de liste sont mises à jour, il est nécessaire de récupérer les données du DB et de les afficher à nouveau.
○ Le code source suivant.
SimpleCursorAdapter adapter = ( SimpleCursorAdapter ) _lvPhones . getAdapter();
adapter . changeCursor( cursor );← Échangez le curseur. Nouveau curseur
(Remarque) Si vous voulez définir l'adaptateur avec `ʻonCreate () et définir (remplacer) le curseur par onResume (), vous pouvez passer null au curseur d'argument lorsque vous créez SimpleCursorAdapter dans onCreate (). ''
public class CustomizedListView2Activity extends AppCompatActivity {
/**
*Données de liste à afficher dans la vue de liste.
*/
private List<Map<String, Object>> _list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customized_list_view2);
_list = createList();
String[] from = {"phoneType", "phoneNo", "phoneSex"};
int[] to = {R.id.imPhoneType, R.id.tvPhoneNo, R.id.tvSex};
SimpleAdapter adapter = new SimpleAdapter(CustomizedListView2Activity.this, _list, R.layout.row, from, to);
adapter.setViewBinder(new CustomViewBinder());
ListView lvPhones = findViewById(R.id.lvPhones);
lvPhones.setAdapter(adapter);
}
/**
*Une méthode qui génère les données de liste affichées dans la vue de liste.
*
* @return Les données de liste générées.
*/
private List<Map<String, Object>> createList() {
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 1; i <= 30; i++) {
int phoneType = (int) (3 * Math.random()) + 1;
int phoneNoInt = (int) (99999999 * Math.random());
int phoneSexInt = (int) (10*Math.random() + 1);
String phoneNo = "090" + String.format("%08d", phoneNoInt);
int phoneSex = 1;
if(phoneSexInt <= 5) {
phoneSex = 0;
}
Map<String, Object> map = new HashMap<>();
map.put("phoneType", phoneType);
map.put("phoneNo", phoneNo);
map.put("phoneSex", phoneSex);
list.add(map);
}
return list;
}
/**
*Classe de classeur de vue personnalisée de vue de liste.
*/
private class CustomViewBinder implements SimpleAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Object data, String textRepresentation) {
int viewId = view.getId();
switch(viewId) {
case R.id.imPhoneType:
ImageView imPhoneType = (ImageView) view;
int phoneType = (Integer) data;
switch(phoneType) {
case 2:
imPhoneType.setImageResource(android.R.drawable.ic_menu_crop);
break;
case 3:
imPhoneType.setImageResource(android.R.drawable.ic_menu_myplaces);
break;
default:
imPhoneType.setImageResource(android.R.drawable.ic_menu_call);
break;
}
return true;
case R.id.tvPhoneNo:
TextView tvPhoneNo = (TextView) view;
String phoneNo = (String) data;
tvPhoneNo.setText(phoneNo);
return true;
case R.id.tvSex:
TextView tvSex = (TextView) view;
int phoneSex = (Integer) data;
String sex = "♂";
if(phoneSex == 0) {
sex = "♀";
}
tvSex.setText(sex);
return true;
}
return false;
}
}
}
public class CustomizedListView3Activity extends AppCompatActivity {
private ListView _lvPhones;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customized_list_view3);
_lvPhones = findViewById(R.id.lvPhones);
String[] from = {"phone_type", "phone_no", "phone_sex"};
int[] to = {R.id.imPhoneType, R.id.tvPhoneNo, R.id.tvSex};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(CustomizedListView3Activity.this, R.layout.row, null, from, to, 0);
adapter.setViewBinder(new CustomViewBinder());
_lvPhones.setAdapter(adapter);
}
@Override
public void onResume() {
super.onResume();
setNewCursor();
}
/**
*Une méthode pour mettre à jour le curseur dans l'adaptateur de curseur.
*/
private void setNewCursor() {
DatabaseHelper helper = new DatabaseHelper(CustomizedListView3Activity.this);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = DataAccess.findAll(db);
SimpleCursorAdapter adapter = (SimpleCursorAdapter) _lvPhones.getAdapter();
adapter.changeCursor(cursor);
}
/**
*Classe de classeur de vue personnalisée de vue de liste.
*
* @author Shinzo SAITO
*/
private class CustomViewBinder implements SimpleCursorAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
switch(viewId) {
case R.id.imPhoneType:
ImageView imPhoneType = (ImageView) view;
int phoneType = cursor.getInt(columnIndex);
switch(phoneType) {
case 2:
imPhoneType.setImageResource(android.R.drawable.ic_menu_crop);
break;
case 3:
imPhoneType.setImageResource(android.R.drawable.ic_menu_myplaces);
break;
default:
imPhoneType.setImageResource(android.R.drawable.ic_menu_call);
break;
}
return true;
case R.id.tvPhoneNo:
TextView tvPhoneNo = (TextView) view;
String phoneNo = cursor.getString(columnIndex);
tvPhoneNo.setText(phoneNo);
return true;
case R.id.tvSex:
TextView tvSex = (TextView) view;
int phoneSex = cursor.getInt(columnIndex);
String sex = "♂";
if(phoneSex == 0) {
sex = "♀";
}
tvSex.setText(sex);
return true;
}
return false;
}
}
}
c'est tout. J'ai résumé la vue de liste sur Android. Si vous avez des suggestions telles que quelque chose qui ne va pas, veuillez nous contacter. Merci d'avoir lu jusqu'au bout.
Recommended Posts