Je suis complètement nouveau sur Java / Android et je suis coincé avec les vues de liste.
Ce que je veux, c'est avoir 4 lignes d'affilée dans la liste avec différents styles de police
rowlayout.xml
<TextView
android:id="@+id/1"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/2"
android:textSize="30sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/3"
android:typeface="sans"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/4"
android:typeface="sans"
android:textSize="15sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
J'ai ceci dans un fichier xml séparé
results.xml
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/TitleLbl" >
</Listview>
et mon adaptateur de tableau ressemble à ceci
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.rowlayout, R.id.2, Array);
setListAdapter(adapter);
Ce que j'essaie de faire, c'est d'obtenir une arraylist (contenant l'ID, le nom, le nom et le numéro) pour remplir la liste afin que chaque information soit sur sa propre ligne dans la ligne.
l'adaptateur de tableau ci-dessus fonctionne, mais chacune des quatre informations est dans sa propre ligne.
Quelqu'un peut-il aider?
(aussi, j'ai parcouru Internet pour essayer de régler le problème, mais je n'arrive pas à trouver quoi que ce soit qui m'aide)
Vous devrez peut-être utiliser une vue de liste personnalisée avec un adaptateur de baie personnalisé. Référez-vous à ce lien par exemple.
Contenu:
Le didacticiel Android HelloListView ( http://developer.android.com/resources/tutorials/views/hello-listview.html ) montre comment lier un ListView à un tableau d'objets chaîne, mais vous le dépasserez probablement assez rapidement. Cet article vous montrera comment lier le ListView à un ArrayList d'objets personnalisés, ainsi que créer un ListView multiligne.
Supposons que vous ayez une sorte de fonctionnalité de recherche qui renvoie une liste de personnes, ainsi que des adresses et des numéros de téléphone. Nous allons afficher ces données sur trois lignes formatées pour chaque résultat et les rendre cliquables.
Tout d'abord, créez votre nouveau projet Android et créez deux fichiers de mise en page. Main.xml sera probablement déjà créé par défaut, alors collez ceci dans:
<?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">
<TextView
android:layout_height="wrap_content"
android:text="Custom ListView Contents"
android:gravity="center_vertical|center_horizontal"
android:layout_width="fill_parent" />
<ListView
android:id="@+id/ListView01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
</LinearLayout>
Ensuite, créez un fichier de mise en page appelé custom_row_view.xml. Cette mise en page sera le modèle pour chaque ligne individuelle dans ListView. Vous pouvez utiliser à peu près n'importe quel type de disposition - Relative, Table, etc., mais pour cela, nous utiliserons simplement Linear:
<?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">
<TextView android:id="@+id/name"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#FFFF00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/cityState"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Maintenant, ajoutez un objet appelé SearchResults. Collez ce code dans:
public class SearchResults {
private String name = "";
private String cityState = "";
private String phone = "";
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setCityState(String cityState) {
this.cityState = cityState;
}
public String getCityState() {
return cityState;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPhone() {
return phone;
}
}
C'est la classe que nous allons remplir avec nos données et charger dans un ArrayList.
Ensuite, vous aurez besoin d'un adaptateur personnalisé. Celui-ci étend simplement le BaseAdapter, mais vous pouvez étendre le ArrayAdapter si vous préférez.
public class MyCustomBaseAdapter extends BaseAdapter {
private static ArrayList<SearchResults> searchArrayList;
private LayoutInflater mInflater;
public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_row_view, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.name);
holder.txtCityState = (TextView) convertView.findViewById(R.id.cityState);
holder.txtPhone = (TextView) convertView.findViewById(R.id.phone);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(searchArrayList.get(position).getName());
holder.txtCityState.setText(searchArrayList.get(position).getCityState());
holder.txtPhone.setText(searchArrayList.get(position).getPhone());
return convertView;
}
static class ViewHolder {
TextView txtName;
TextView txtCityState;
TextView txtPhone;
}
}
(C'est fondamentalement le même que la démo de l'API List14.java)
Enfin, nous allons tout câbler dans le fichier de classe principal:
public class CustomListView extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<SearchResults> searchResults = GetSearchResults();
final ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MyCustomBaseAdapter(this, searchResults));
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv1.getItemAtPosition(position);
SearchResults fullObject = (SearchResults)o;
Toast.makeText(ListViewBlogPost.this, "You have chosen: " + " " + fullObject.getName(), Toast.LENGTH_LONG).show();
}
});
}
private ArrayList<SearchResults> GetSearchResults(){
ArrayList<SearchResults> results = new ArrayList<SearchResults>();
SearchResults sr1 = new SearchResults();
sr1.setName("John Smith");
sr1.setCityState("Dallas, TX");
sr1.setPhone("214-555-1234");
results.add(sr1);
sr1 = new SearchResults();
sr1.setName("Jane Doe");
sr1.setCityState("Atlanta, GA");
sr1.setPhone("469-555-2587");
results.add(sr1);
sr1 = new SearchResults();
sr1.setName("Steve Young");
sr1.setCityState("Miami, FL");
sr1.setPhone("305-555-7895");
results.add(sr1);
sr1 = new SearchResults();
sr1.setName("Fred Jones");
sr1.setCityState("Las Vegas, NV");
sr1.setPhone("612-555-8214");
results.add(sr1);
return results;
}
}
Notez que nous obtenons d'abord une ArrayList d'objets SearchResults (normalement, cela proviendrait d'une source de données externe ...), la passons à l'adaptateur personnalisé, puis mettons en place un écouteur de clic. L'écouteur récupère l'élément sur lequel l'utilisateur a cliqué, le reconvertit en objet SearchResults et fait tout ce qu'il doit faire.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots