I have a listview that should print 13 fields, the problem I have is that 7 are different and the other 6 are repeated, then I leave the code that I use:
Law class:
public class Leyes extends Activity implements AdapterView.OnItemClickListener {
String[] member_names;
TypedArray profile_pics;
String[] statues;
List<RowItem> rowItems;
ListView mylistview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leyes);
rowItems = new ArrayList<RowItem>();
member_names = getResources().getStringArray(R.array.titulosley);
profile_pics = getResources().obtainTypedArray(R.array.fotosley);
statues = getResources().getStringArray(R.array.descripcionley);
for (int i = 0; i < member_names.length; i++) {
RowItem item = new RowItem(member_names[i],
profile_pics.getResourceId(i, -1), statues[i]);
rowItems.add(item);
}
mylistview = (ListView) findViewById(R.id.listviewLeyes);
CustomAdapter adapter = new CustomAdapter(this, rowItems);
mylistview.setAdapter(adapter);
Log.d("tamaño",String.valueOf(rowItems.size()));
mylistview.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String member_name = rowItems.get(position).getMember_name();
Toast.makeText(getApplicationContext(), "" + member_name,
Toast.LENGTH_SHORT).show();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
}
RowItem class:
public class RowItem {
private String member_name;
private int profile_pic_id;
private String status;
public RowItem(String member_name, int profile_pic_id, String status) {
this.member_name = member_name;
this.profile_pic_id = profile_pic_id;
this.status = status;
}
public String getMember_name() {
return member_name;
}
public void setMember_name(String member_name) {
this.member_name = member_name;
}
public int getProfile_pic_id() {
return profile_pic_id;
}
public void setProfile_pic_id(int profile_pic_id) {
this.profile_pic_id = profile_pic_id;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
CustomAdapter() class:
public class CustomAdapter extends BaseAdapter {
Context context;
List<RowItem> rowItems;
CustomAdapter(Context context, List<RowItem> rowItems) {
this.context = context;
this.rowItems = rowItems;
}
@Override
public int getCount() {
return rowItems.size();
}
@Override
public Object getItem(int position) {
return rowItems.get(position);
}
@Override
public long getItemId(int position) {
return rowItems.indexOf(getItem(position));
}
/* private view holder class */
private class ViewHolder {
ImageView profile_pic;
TextView member_name;
TextView status;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listviewformato, null);
holder = new ViewHolder();
holder.member_name = (TextView) convertView
.findViewById(R.id.tituloley);
holder.profile_pic = (ImageView) convertView
.findViewById(R.id.fotoley);
holder.status = (TextView) convertView.findViewById(R.id.descripcionley);
RowItem row_pos = rowItems.get(position);
holder.profile_pic.setImageResource(row_pos.getProfile_pic_id());
holder.member_name.setText(row_pos.getMember_name());
holder.status.setText(row_pos.getStatus());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
}
in the for of the laws class, I think this is the problem since if I change the -1 to 1 it shows me the ones that are missing, but the previous ones disappear
edit:
xml activity laws:
<ListView
android:id="@+id/listviewLeyes"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:
</ListView>
xml activity list view format
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="2dp">
<ImageView
android:id="@+id/fotoley"
android:layout_width="70dp"
android:layout_height="70dp"
android:contentDescription="desc"
android:paddingLeft="10dp"
android:paddingRight="10dp"/>
<TextView
android:id="@+id/tituloley"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/fotoley"
android:paddingBottom="10dp"
android:text="txt"
android:textSize="20dp"/>
<TextView
android:id="@+id/descripcionley"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="txt"
android:textSize="16dp"
android:layout_below="@+id/tituloley"
android:layout_toEndOf="@+id/fotoley" />
</RelativeLayout>
here I leave the array:
<string-array name="titulosley">
<item>Transitar por pista de la derecha</item>
<item>Transitar según sentido de marcha</item>
<item>Prohibición de circulación</item>
<item>Obligación de circulación.</item>
<item>Prohibida la circulación en autopistas.</item>
<item>Elementos necesarios para circular diariamente.</item>
<item>Requerimiento para la conducción.</item>
<item>Respetar normas y señales de tránsito.</item>
<item>No adherirse a otros vehículos.</item>
<item>Tránsito en grupos</item>
<item>Transporte de carga</item>
<item>Señalizar hacia donde se dirige.</item>
<item>No Utilizar.</item>
</string-array>
<string-array name="descripcionley">
<item>Los ciclistas siempre deben transitar por la calle y por la pista derecha, a un metro de la cuneta.
Solo en caso que la pista derecha sea exclusiva para buses, podrán transitar por la pista izquierda</item>
<item>Al transitar por la calle, siempre lo deberán hacer respetando el sentido de esta, nunca ir contra el tránsito.</item>
<item>Está prohibido circular por las veredas, a menos que los ciclistas sean niños o adultos mayores.</item>
<item>En caso de existir ciclovías o vías exclusivas, es obligatorio transitar por ellas.</item>
<item>Está prohibido circular por las autopistas y/o autovías, a menos que exista una vía o ciclovía donde esté permitida su circulación. Esta regla aplica también en los accesos a las autopistas, autovías y túneles.</item>
<item>Un ciclista siempre deberá portar los siguientes elementos de seguridad:
• Luces delanteras: un foco de luz blanca que permita proyectar luz frontal.
• Luces traseras: una luz roja fija.
• Utilizar un timbre o aparato sonoro que pueda emitir sonidos de intensidad moderada.
• Casco protector, que debe cubrir la parte superior de la cabeza y permanecer fijo a ella mediante una cinta o correa que pase por debajo de la barbilla.
• Un sistema de frenos efectivo.
• Las bicicletas y los ciclistas deberán contar con elementos reflectantes. En el caso de los ciclistas, puede ser un chaleco, bandas o hasta tobilleras.
</item>
<item>No se pueden llevar a más personas del número para cual fue diseñada la bicicleta.</item>
<item>Los ciclistas deben respetar los semáforos destinados exclusivamente para ellos, al igual que los peatones. Los semáforos siguen las mismas reglas básicas que deben seguir los automovilistas.</item>
<item>Está prohibido que los ciclistas se enganchen de otros vehículos que se encuentren en movimiento en las vías públicas.</item>
<item>Si van a transitar en grupo, los ciclistas deberán ir de 2 en 2, ocupando solo la mitad de la calzada. De noche, deberán transitar uno tras otro.</item>
<item>No deben transportar carga que impida mantener ambas manos sobre el manubrio y el debido control de la bicicleta.</item>
<item>Deben señalizar con los brazos las maniobras de viraje, extendiendo los brazos de manera horizontal dependiendo de la dirección hacia donde se dirigen.</item>
<item>No pueden hablar por celular mientras conducen.</item>
</string-array>
<array name="fotosley">
<item>@drawable/uno</item>
<item>@drawable/dos</item>
<item>@drawable/tres</item>
<item>@drawable/cuatro</item>
<item>@drawable/cinco</item>
<item>@drawable/seis</item>
<item>@drawable/siete</item>
<item>@drawable/ocho</item>
<item>@drawable/nueve</item>
<item>@drawable/diez</item>
<item>@drawable/once</item>
<item>@drawable/doce</item>
<item>@drawable/trece</item>
</array>
The ListView layout must not have the last "android:" :
Regarding repeated elements, you have to make sure that the list
rowItems
does not contain repeated data and make sure to assign the properties after having created or reused the view:A listView reuses the view to save memory, when convertView is null you only have to instantiate the views but not assign values to them, the code would be as follows: