2013-07-16 51 views
2

我需要製作一個視圖,它是一個列表視圖。這應該是一個自定義列表,因爲我希望列表中的每個項目都是一個圖像視圖,當觸摸時顯示細節。卡片在Android列表視圖中翻轉

我正在調查卡片Filp視圖(使用片段)每個android引用,但我覺得我失去了一些非常重要的事情,因爲這不正確。下面是我的自定義適配器的代碼,它將顯示正面。對於如何翻轉視圖我還有一個疑問。不幸的是,andrdoid教程是不是非常有幫助

public class CustomCardAdapter extends ArrayAdapter<String> { 

    private int textViewResourceId; 
    private Context mContext; 
    private List<String> list; 
    private FragmentManager fm; 

    public CustomCardAdapter(FragmentManager fm, Context context, int textViewResourceId, 
      List<String> list) { 
     super(context, textViewResourceId, list); 
     mContext = context; 
     this.textViewResourceId = textViewResourceId; 
     this.list = list; 
     this.fm = fm; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = mInflater.inflate(textViewResourceId, parent); 

     fm.beginTransaction() 
      .add(R.id.rowItem, new CardFrontFragment()) 
      .commit(); 

     String frontText = list.get(position); 
     String bsckText = frontText+"...back side"; 

     TextView tvFront = (TextView)rowView.findViewById(R.id.frontSide); 


     tvFront.setText(frontText); 

     return rowView; 
    } 



} 

/這將只顯示,如果這項工作過,前卡fragment.How做我「翻轉」的說法?這是通過附加onClickListner。

有沒有人遇到過這個問題?任何幫助將是偉大的!

請指教?

+0

是的,你有一個onClickListener添加到列表中的每個項目:rowView.setOnClickListener(新OnCLickListener){})。在onClick()方法中,您可以調用android教程http://developer.android.com/training/animation/cardflip.html的flipCard()。問問這是否對你沒有幫助。 – owe

+0

我跟着這個例子,但在這種情況下,我不得不在適配器內創建片段視圖,我不知道該怎麼做。是否可以在適配器定義中啓動並附加片段?任何小代碼片段都會非常有幫助 – curioussam

+0

我試圖向您展示一個沒有碎片的可能解決方案 - >在我回答的最後一段中,我嘗試解釋原因。要使用您的視圖製作3DFlip,以下鏈接將幫助您:http://www.inter-fuser.com/2009/08/android-animations-3d-flip.html – owe

回答

0

要理解怎麼做我會做一個簡單的例子來翻轉沒有任何片段和FragmentManager的意見。 然後在你的適配器的getView方法是這樣的:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    LayoutInflater mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = mInflater.inflate(textViewResourceId, parent); 

    String frontText = list.get(position); 
    String backText = frontText+"...back side"; 

    TextView tvFront = (TextView)rowView.findViewById(R.id.frontSide); 
    tvFront.setText(frontText); 
    // set View visible 
    tvFront.setVisibility(View.VISIBLE); 

    TextView tvBack = (TextView)rowView.findViewById(R.id.backSide); 
    tvBack.setText(backText); 
    // disable visiblity of view 
    tvBack.setVisibility(View.GONE); 

    // add both textViews to your row: 
    rowView.removeAllViews(); 
    rowView.addView(tvFront); 
    rowView.addView(tvBack); 

    // now set a clickListener to your row 
    rowView.setOnClickListener(new MyFlipListener(tvFront, tvBack)); 
    return rowView; 
} 

class MyFlipListener implements OnClickListener{ 

    TextView mTvFront; 
    TextView mTvBack; 

    public MyFlipListener(TextView tvFront, TextView tvBack){ 
     mTvFront = tvFront; 
     mTvBack = tvBack; 
    } 

    @Override 
    public void onClick(){ 
     // check which text is actually shown and make your changes 
     if(mTvFront.isVisible){ 
       mTvFront.setVisibility(View.GONE); 
       mTvBack.setVisibility(View.VISIBLE); 
     }else{ 
       mTvFront.setVisibility(View.VISIBLE); 
       mTvBack.setVisibility(View.GONE); 
     } 
    } 

} 

要使用您的片段,我會用同樣的方式:

  • 第一添加到每個rowItem您CardFrontFragment
  • 然後加入你rowItem clickListener調用flipCard()

我在這裏看到的問題是,你需要一個唯一的ID爲每個listItem,否則你的Fra gmentManager不知道哪個CardFrontFragment必須被翻轉(該示例僅顯示一個CardFrontFragment和CardBacktFragment - 但是您有多個CardFrontFragment和CardBackFragment)。 幾周前,我嘗試了一些與GridView類似的東西。但它不適合我,所以我採取另一種解決方案的意見。

我希望這將幫助你:)