Multicolumn listview wrong view

Viewed 75

I'm in trouble with multicoloumn listview. The problem is when i srolling up or down my list the topics changes row. This is my activity:

ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();
    HashMap<String,String> temp = null; //new HashMap<String, String>();

    //TRASFERISCO I DATI DAGLI ARRAY ALLA MAPPA
    for(int i = 0 ; i < 24 ; i++) {
        temp = new HashMap<String, String>();
        temp.put(FIRST_COLUMN, i + " " + Array_Nome[i]);
        temp.put(SECOND_COLUMN, Array_Cognome[i]);
        temp.put(THIRD_COLUMN, Array_Cellulare[i]);
        temp.put(FOURTH_COLUMN, Array_UUID[i]);
        list.add(temp);
    }

    ListView listView=(ListView)findViewById(R.id.listView1);
    MultiColoumnAdapter adapter=new MultiColoumnAdapter(this, list);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, final View view, int position, long id)
        {
            int pos=position+1;
            Toast.makeText(MainActivity.this, Integer.toString(pos)+" Clicked", Toast.LENGTH_SHORT).show();
        }

    });

This is the Adapter:

public class MultiColoumnAdapter extends BaseAdapter{

public ArrayList<HashMap<String, String>> list;
Activity activity;
TextView txtFirst;
TextView txtSecond;
TextView txtThird;
TextView txtFourth;
public MultiColoumnAdapter(Activity activity, ArrayList<HashMap<String, String>> list){
    super();
    this.activity=activity;
    this.list=list;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}



@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub



    LayoutInflater inflater=activity.getLayoutInflater();

    if(convertView == null){

        convertView=inflater.inflate(R.layout.colmn_row, null);

        txtFirst=(TextView) convertView.findViewById(R.id.name);
        txtSecond=(TextView) convertView.findViewById(R.id.gender);
        txtThird=(TextView) convertView.findViewById(R.id.age);
        txtFourth=(TextView) convertView.findViewById(R.id.status);

    }else{

    }

    HashMap<String, String> map=list.get(position);
    txtFirst.setText(map.get(FIRST_COLUMN));
    txtSecond.setText(map.get(SECOND_COLUMN));
    txtThird.setText(map.get(THIRD_COLUMN));
    txtFourth.setText(map.get(FOURTH_COLUMN));

    return convertView;
}

and finally the coloumn row:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:id="@+id/name"
    android:layout_height="wrap_content"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:textStyle="bold"
    android:textSize="22sp"/>

<TextView
    android:id="@+id/gender"
    android:layout_height="wrap_content"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:textSize="22sp"/>

<TextView
    android:id="@+id/age"
    android:layout_height="wrap_content"
    android:layout_width="0dp"
    android:layout_weight="0.5"
    android:textSize="22sp"/>

<TextView
    android:id="@+id/status"
    android:layout_height="wrap_content"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:textSize="22sp"/>

The result is something like this:

1 Marc Thomson 12345678

2 Jhon Smith 54654879

3 Maria Trump 45869958

and after scrolling up/down:

3 Maria Trump 45869958

1 Mark Thomson 12345678

2 Jhon Smith 54654879

4 Answers
Related