2014-02-11 27 views
1

我試圖在Twitter Android應用中模仿一個動作。當你長按/滑動鳴叫(列表項),它看起來像這樣如何在長按列表項時加載列表視圖中的菜單

enter image description here

這很容易讓用戶採取的列表項的操作,而無需離開屏幕。我如何在我的應用中做類似的事情?

現在我已經添加了一個上下文菜單,看起來像這樣(注意,它淡出了應用程序的其餘部分)。

enter image description here

我通過registerForContextMenu(listView)

目前實現這一點,我的名單是這樣的:

ListAdapter adapter = new SimpleAdapter(
     MainActivity.this, myList, 
     R.layout.list_items, new String[] {LI_ID, 
     LI_NAME, LI_COUNT}, new int[] { 
     R.id.li_id, R.id.li_name, R.id.li_count}); 
setListAdapter(adapter); 

和我的佈局僅僅是這樣的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/li_id" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:visibility="gone" /> 

    <TextView 
     android:id="@+id/li_name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="16dip" 
     android:textColor="#000000" 
     android:paddingTop="15dip" 
     android:paddingBottom="15dip" 
     android:paddingLeft="10dip" 
     android:textStyle="bold"/> 

    <TextView android:id="@+id/li_count" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:textColor="#ffffff" 
     android:textStyle="bold" 
     android:background="#9ed321" 
     android:paddingRight="3dip" 
     android:paddingLeft="3dip"/> 


</RelativeLayout> 

回答

0

你可以只窩在每一個人ListView項目這是最初不可見的另一個佈局,然後只需撥動上長按事件視圖的可視性。

例如:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:animateLayoutChanges="true" > 

    <TextView 
     android:id="@+id/main_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:padding="16dp" 
     android:layout_gravity="center" /> 

    <LinearLayout 
     android:id="@+id/hidden_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:visibility="gone" > 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Delete" /> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Edit" /> 

    </LinearLayout> 

</LinearLayout> 

然後在您的活動,只需設置一個onItemLongClickListenerListView,並切換 知名度hidden_view的:

public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id){ 
    LinearLayout mView = view.findViewById(R.id.hidden_view); 

     switch(mView.getVisibility()){ 
      case View.VISIBLE: 
       mView.setVisibility(View.GONE); 
       break; 
      case View.GONE: 
       mView.setVisibility(View.VISIBLE); 
       break; 
      } 

     } 

} 
+0

我讀了你的答案併發布了我的佈局和列表適配器。現在我注意到你已經提供了一個例子。我會盡力實施你所建議的,看看它是如何實現的。 – Anthony

+0

這似乎是爲我工作。雖然我遇到了一個問題:當一個項目被長時間按下並顯示隱藏視圖,然後我長按另一個項目時,我想讓第一個項目的hidden_​​view翻轉回來。我不認爲目前發生這種情況。 – Anthony

+0

您必須爲此添加額外的內務管理,但相對簡單。只需保留對之前展開的視圖的引用,並在展開下一個視圖之前隱藏視圖,然後將全局引用設置爲展開的下一個視圖。此外,由於ListView可以回收視圖,所以如果擴展自己的ArrayAdapter而不是使用SimpleAdapter,則可能更容易實現此功能,因此您可以控制公共View的getView(int位置,View convertView,ViewGroup父級)方法功能(即您如果可見,可能不得不在回收的convertView中隱藏hide_view)。 – Submersed

相關問題