2011-08-04 66 views
0

這可能是一個愚蠢的問題。Android +使用ViewFlipper在ListView中翻轉單個項目?

我知道我可以在ViewFlipper中包裝一個ListView,但是我們可以在ViewFlipper中包裝各個ListView項目嗎?例如,最新的Twitter應用程序使用ListView來顯示推文。它還允許您通過滑動tweet以暴露下面的設置選項圖標,來設置單個項目的設置。這是一個自定義實現還是我們有能力使用ListView和ViewFlipper創建類似的東西?謝謝,任何建議表示讚賞!


我花了一些這方面的時間,得到了ListView控件來顯示通過ViewFlipper附加內容。但是,該視圖似乎只是「翻轉」ListView中的最後一個項目。點擊時如何讓每個項目翻轉?下面是一些代碼:

row.xml

<?xml version="1.0" encoding="utf-8"?> 
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/flipper" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:id="@+id/toptext" android:layout_width="fill_parent" 
       android:layout_height="0dip" android:layout_weight="1" 
       android:gravity="center_vertical" /> 
    <TextView android:id="@+id/bottomtext" android:layout_width="fill_parent" 
       android:layout_height="0dip" android:layout_weight="1" 
       android:gravity="center_vertical" /> 
</ViewFlipper> 

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView android:id="@id/android:list" android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</LinearLayout> 

ListActivityView.java - 擴展ListActivity

... 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    ... 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     // doesn't matter which line is clicked 
     // only the last item in the ListView displays the bottomText 
     viewFlipper.showNext(); 
    } 

ListingAdapter.java - 擴展ArrayAdapter

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 

     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.row, null); 

      viewFlipper = (ViewFlipper) v.findViewById(R.id.flipper); 
     } 

回答

1

如果我得到你的問題正確的 - 你可以使用ViewFlipper定義您的列表中排佈局內初始化它呈現相應的視圖

當你喜歡的方式
+0

我試圖做到這一點,但還沒有成功。如果我仍然無法使用它,我今晚會採取更多的措施併發布代碼。感謝您的迴應! – worked

+0

'viewFlipper'似乎是一個成員 - 所以它總是引用'getView()'返回的最後一個項目。你需要在調用'showNext()'' – Asahi

+0

之前在'onListItemClick()'中重新啓動它。你能否澄清一點,重新啓動它?謝謝!請注意,我將ViewFlipper換成了FrameLayout,但我仍然遇到同樣的問題。而不是「viewFlipper.showNext();」我使用自定義動畫。 – worked

0
Below code helps you achieve a requirement for having a view flipper in list view with invidual row flipping 
## xml file ## 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/regularLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="@dimen/activity_horizontal_margin"> 

    <ViewFlipper 
     android:id="@+id/row_item_flipper" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:orientation="vertical" 
      android:layout_height="match_parent"> 
      <TextView 
       android:id="@+id/list_item" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Regular Layout" 
       android:textSize="28sp" /> 

      <Button 
       android:text="Flip" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/front_button" /> 
     </LinearLayout> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:orientation="vertical" 
      android:layout_height="match_parent"> 
      <TextView 
       android:id="@+id/backTextView" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Flip row done" 
       android:textSize="18sp" /> 

      <Button 
       android:text="Flip back" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/back_button" /> 
     </LinearLayout> 
    </ViewFlipper> 
</LinearLayout> 


---------- 
## Java code ## 


    @Override 
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false); 
     return new ItemViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final ItemViewHolder holder, int position) { 

     final CustomItem data = dataList.get(position); 
      holder.regularLayout.setVisibility(View.VISIBLE); 
      holder.swipeLayout.setVisibility(View.GONE); 
      holder.listItem.setText(data.dataItemValue); 
      holder.backTextView.setText(data.dataItemValue + " position : "+ position); 
      holder.viewFlipper.setFlipInterval(0); 
      holder.viewFlipper.setInAnimation(null); 
      holder.viewFlipper.setOutAnimation(null); 
      if(holder.viewFlipper.getDisplayedChild()==0 && data.isFlipON){ 
       holder.viewFlipper.setDisplayedChild(1); 
      } else if(holder.viewFlipper.getDisplayedChild()==1 && !data.isFlipON){ 
       holder.viewFlipper.setDisplayedChild(0); 
      }else if(data.isFlipON){ 
       holder.viewFlipper.setDisplayedChild(1); 
      }else{ 
       holder.viewFlipper.setDisplayedChild(0); 
      } 



     holder.frontButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       AnimationFactory.flipTransition(holder.viewFlipper, AnimationFactory.FlipDirection.LEFT_RIGHT); 
       data.isFlipON = true; 
      } 
     }); 
     holder.backButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       data.isFlipON = false; 

       AnimationFactory.flipTransition(holder.viewFlipper, AnimationFactory.FlipDirection.LEFT_RIGHT); 
      } 
     }); 

    }