2014-04-01 51 views
1

所以我的問題是這樣的。我在每行都有一個viewflipper的列表視圖。當數據變得越來越多,他們不適合在屏幕上,當我點擊一行以啓用viewflipper,它翻轉行,但它也翻轉屏幕下方的另一個隨機行(我可以看到它,如果我向下滾動)Android:ListView和viewflipper在每一行onclick翻轉更多行

有時候,如果我再次上下滾動翻轉的行(第二個)切換回正常,並再次翻轉。

這裏是我的適配器

public class HistoryBaseAdapter extends BaseAdapter { 

private static ArrayList<HistoryResults> searchArrayList; 
private Context CONTEXT; 


public HistoryBaseAdapter(Context context, ArrayList<HistoryResults> results, boolean length) { 
    searchArrayList = results; 
    mInflater = LayoutInflater.from(context); 
    log_length = length; 
    CONTEXT = context; 
} 

@Override 
public int getCount() { 
    return searchArrayList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return searchArrayList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.history_row_view, null); 
     holder = new ViewHolder(); 

     holder.flipper = (ViewFlipper) convertView.findViewById(R.id.flipper); 
     holder.flipper.setInAnimation(AnimationUtils.loadAnimation(CONTEXT, R.anim.slide_in)); 
     holder.flipper.setOutAnimation(AnimationUtils.loadAnimation(CONTEXT, R.anim.slide_out)); 



     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.flipper.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      holder.flipper.showNext(); 

     } 
    }); 
    return convertView; 
} 

static class ViewHolder { 

    ViewFlipper flipper; 


} 

}

有誰知道什麼是錯?

+1

這是因爲listview回收視圖。檢查這個博客可能會幫助http://graphics-geek.blogspot.in/search?updated-max=2013-07-12T09:08:00-07:00&max-results=7雖然它可能不會直接幫助你解決你的問題 – Raghunandan

回答

1

其實@Raghunandan幫助! https://www.youtube.com/watch?v=8MIfSxgsHIs

我只是增加了2線

holder.flipper.setOnClickListener(new OnClickListener() { 

     boolean hasTransientState = true; 

     @Override 
     public void onClick(View v) { 
      holder.flipper.showNext(); 
      holder.flipper.setHasTransientState(hasTransientState); 
      hasTransientState = !hasTransientState; 

     } 
    }); 

我不知道,如果是這樣做的更有效的方式,但它的工程! 謝謝!

+0

你救了我1個月的時間男人!向你致敬 –