2013-02-13 42 views
1

我在我的應用程序中有一個ListView,它可以在用戶請求後通過在每個listview行的開始處拖動imageview來重新排列。我在一個小窗口中向用戶顯示列表視圖,爲了最大化空間,我將拖動視圖的可見性設置爲GONE,並計劃在用戶選擇調用編輯列表的菜單項時將其設置爲可見項目。Android:改變所有列表視圖行中項目的可見性

下面是一排項目的佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="?android:attr/activatedBackgroundIndicator" 
android:orientation="horizontal" > 

<ImageView 
    android:id="@id/drag_handle" 
    android:layout_width="32dp" 
    android:layout_height="32dp" 
    android:layout_margin="8dp" 
    android:visibility="gone" 
    android:src="@drawable/ic_drag_dots_holo_dark" /> 

<View 
    android:layout_width="1dp" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="16dp" 
    android:layout_marginTop="16dp" 
    android:background="?android:attr/dividerVertical" /> 

    <TextView 
     android:id="@+id/drag_n_drop_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="8dp" 
     android:paddingRight="8dp" 
     android:maxLines="1" 
     android:minHeight="24dp" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="?android:attr/textColorPrimary" /> 
</LinearLayout> 

下面是菜單選擇代碼:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_edit_playlist: 
     if (inEditMode) { 
      //If we are already showing the drag view, hide it. 
      inEditMode = false;        
      findViewById(R.id.drag_handle).setVisibility(View.GONE); 
     } 
     else { 
      //If the drag view is hidden, make it visible. 
      inEditMode = true; 
      findViewById(R.id.drag_handle).setVisibility(View.VISIBLE); 
     }      
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 

這段代碼的問題是,當我叫setVisibility()它只會改變拖動視圖在列表視圖的第一個項目上的可見性以及所有其他行上的拖動視圖保持隱藏狀態。

在這種情況下,我會做什麼使所有行上的所有dragViews可見?

編輯 這裏是我怎麼想它按編輯後看的image,這裏是一個image它的外觀,現在,上面的代碼。

謝謝!

+0

1張照片勝於詞語。 – hakiko 2013-02-13 20:29:01

+0

@hakiko我不知道我明白你的意思。 – 2013-02-14 04:43:39

+0

顯示你的gui請 – hakiko 2013-02-14 13:53:15

回答

3

這段代碼的問題是,當我叫setVisibility()它 才更改的 的firstmost項目列表視圖中拖動視圖的可見性,以及所有其他行的dragview保持隱藏。

這種行爲是正常的,因爲你想一個View的知名度使用findViewById()一排,方法,它將從佈局ID返回第一出現一個View的改變。第一次出現將位於列表的第一個可見行中(無論如何,findViewById方法將不起作用,因爲您可能會看到ListView的行中的視圖都將具有相同的ID)。

我該怎麼做才能使這個 大小寫中的所有行都顯示所有dragViews?

正確的方法是讓ListView的適配器知道在哪個國家它目前在(inEditMode)和顯示/隱藏基於該getView方法拖動手柄。一旦你這樣做,你所要做的就是在onContextItemSelected上更新inEditMode狀態變量並在適配器上調用notifyDataSetChanged()方法。

+0

完美工作,謝謝! – 2013-02-14 16:28:53

+0

你能否提供一個例子。我面臨同樣的問題 – Dimitri 2013-04-10 09:52:26

+0

@Nikita我不知道給你什麼樣的例子(關於什麼部分)。您只需要維護一個布爾值來指示當前狀態並更新適配器。 – Luksprog 2013-04-11 09:11:18

相關問題