2016-04-08 2 views
0

Ich habe versucht, indem Sie diesem Tutorial einen mehrspaltigen Listenansicht zu erstellen:Eine Reihe in der Listenansicht ändert sich, wenn gescrollt (Android Studio)

http://techlovejump.com/android-multicolumn-listview/.

Das Problem trat auf, wenn die Anzahl der Datensätze so groß war, dass die gesamte Ansicht den Bildschirm eines Telefons überschritt. Jetzt, wenn ich scrolle, ändern sich alle Datensätze in einer der Zeilen (ihre Werte werden geändert). Alle anderen Reihen sind vollkommen in Ordnung. Was könnte das Problem sein?

public class ListViewAdapters extends BaseAdapter{ 

    public ArrayList<HashMap<String, String>> list; 
    Activity activity; 
    TextView txtFirst; 
    TextView txtSecond; 
    TextView txtFourth; 

    public ListViewAdapters(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 

     HashMap<String, String> map=list.get(position); 
     LayoutInflater inflater=activity.getLayoutInflater(); 

     if(convertView == null) 
     { 
      if(map.get(MARKED)=="no") 
      { 
      convertView=inflater.inflate(R.layout.colmn_row, null); 
      } 
      else if (map.get(MARKED)=="yes") 
      { 
      convertView=inflater.inflate(R.layout.colmn_row_clicked, null); 
      } 
      txtFirst=(TextView) convertView.findViewById(R.id.name); 
      txtSecond=(TextView) convertView.findViewById(R.id.gender); 
      txtFourth=(TextView) convertView.findViewById(R.id.status); 
     } 

     txtFirst.setText(map.get(FIRST_COLUMN)); 
     txtSecond.setText(map.get(SECOND_COLUMN)); 
     txtFourth.setText(map.get(FOURTH_COLUMN)); 

     return convertView; 
    } 

} 
+0

Zeilen werden changing..means Ist Artikel Position geändert werden? –

+0

Ihre Werte sind geändert. – Mike

+0

Versuchen Sie mit 'Holder' und Override' getItemViewType() 'und' getViewTypeCount() 'Methoden von BaseAdapter –

Antwort

2

Bitte versuchen Sie diesen Code:

public class ListViewAdapters extends BaseAdapter { 

public ArrayList<HashMap<String, String>> list; 
Activity activity; 
TextView txtFirst; 
TextView txtSecond; 
TextView txtFourth; 

public ListViewAdapters(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 
    ViewHolder holder; 
    HashMap<String, String> map=list.get(position); 
    LayoutInflater inflater=activity.getLayoutInflater(); 

    if(convertView == null) { 
     holder = new ViewHolder(); 
     if (map.get(MARKED) == "no") { 
      convertView = inflater.inflate(R.layout.colmn_row, null); 
     } else if (map.get(MARKED) == "yes") { 
      convertView = inflater.inflate(R.layout.colmn_row_clicked, null); 
     } 
     holder.txtFirst = (TextView) convertView.findViewById(R.id.name); 
     holder.txtSecond = (TextView) convertView.findViewById(R.id.gender); 
     holder.txtFourth = (TextView) convertView.findViewById(R.id.status); 

     holder.txtFirst.setText(map.get(FIRST_COLUMN)); 
     holder.txtSecond.setText(map.get(SECOND_COLUMN)); 
     holder.txtFourth.setText(map.get(FOURTH_COLUMN)); 
    }else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    return convertView; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

@Override 
public int getViewTypeCount() { 
    return getCount(); 
} 

public class ViewHolder { 
    TextView txtFirst, txtSecond,txtFourth; 

} 

}

+0

Perfekt, danke. – Mike

+0

es funktionierte für mich, danke – GvSharma

Verwandte Themen