我有一個列表視圖的問題;我在兩個片段中創建了兩個ListView以在同一個佈局中顯示它們當我滾動列表時,如何從列表視圖中保持狀態(如所選項目)?
而且,當我從左側ListView中選擇一個項目時,根據所選項目自動刷新右側ListView。 問題是,當我從右側的ListView中選擇一個項目時,它將顏色更改爲綠色,這沒問題,因爲我是以這種方式編程的,如果我選擇另一個項目,它也必須更改爲綠色,並保留原始從第一個選擇項的顏色,就像我告訴你下面的圖片
但是當我滾動左側ListView中選擇另一個項目,我返回到列表的頂部,的狀態選擇的項目已經走了,正如我在下面
The new view, without keep the state selected
我知道原因是因爲列表視圖回收它的項目視圖,但我嘗試了很多事情來試圖保持狀態,無論我滾動列表,但我無法實現此目標。 在這一點上,我不知道我必須從我的代碼中改變什麼;我向你展示重要的部分;如果你需要更多的信息,請告訴我。
的列表項的構造:
public class Lista_Item {
private String color, texto;
private String textoSuperior, textoInferior;
boolean seleccionado = false;
public Lista_Item(String color, String textoSuperior, String textoInferior, boolean seleccionado) {
// TODO Auto-generated constructor stub
this.color = color;
this.textoSuperior = textoSuperior;
this.textoInferior = textoInferior;
this.seleccionado = seleccionado;
}
public Lista_Item(String color, String texto) {
// TODO Auto-generated constructor stub
this.color = color;
this.texto = texto;
}
public String getTextoSuperior() {
return textoSuperior;
}
public String getTextoInferior() {
return textoInferior;
}
public boolean getSeleccionado() {
return seleccionado;
}
public String getTexto() {
return texto;
}
public String getColor() {
return color;
}
public void setSeleccionado(boolean seleccionado) {
this.seleccionado = seleccionado;
}
}
適配器:
private class ListAdapter extends ArrayAdapter<Lista_Item> {
private int mResourceId = 0;
private LayoutInflater mLayoutInflater;
public ListAdapter(Context context, int resource, int textViewResourceId, ArrayList<Lista_Item> listaItem) {
super(context, resource, textViewResourceId, listaItem);
mResourceId = resource;
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mLayoutInflater.inflate(mResourceId, parent, false);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.tvItemListaColor);
holder.l = (LinearLayout)convertView.findViewById(R.id.layoutColor);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
Lista_Item pedido = listItems.get(position);
holder.name.setText(pedido.getTexto());
holder.l.setBackgroundColor(Color.parseColor(pedido.getColor()));
holder.name.setTag(pedido);
return convertView;
}
private class ViewHolder {
TextView name;
LinearLayout l;
}
}
事件OnItemClickListener:
public AdapterView.OnItemClickListener d = new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> list, View view, int pos, long id) {
// TODO Auto-generated method stub
if(listener!=null){
listener.onPedidoSeleccionado((Lista_Item)list.getAdapter().getItem(pos));
}
String[] item = parts[pos].split("!");
Toast.makeText(getActivity(), "Ha pulsado el item " +item[0], Toast.LENGTH_SHORT).show();
Log.d("Color","Color = "+colorSaved);
if (currentSelectedView != null && currentSelectedView != view) {
unhighlightCurrentRow(currentSelectedView, colorSaved);
colorSaved = item[1];
}
currentSelectedView = view;
highlightCurrentRow(currentSelectedView);
colorSaved = item[1];
}
};
而我上面所用的方法:
private void unhighlightCurrentRow(View rowView, String color) {
rowView.setBackgroundColor(Color.parseColor("#"+color));
}
private void highlightCurrentRow(View rowView) {
rowView.setBackgroundColor(Color.GREEN);
}
請,任何幫助???
什麼peating? – mubeen
更改您的問題的標題,以便更有意義。 – Henry
嗨,我很抱歉,但由於某種原因,這不會讓我寫自己的標題,而是從另外的問題或主題寫下另一個問題或主題,但問題是:**我該如何保持狀態在ListView的項目中(如選中的項目)當我滾動列表** –