2014-01-20 72 views
0

我有一個畫廊,我將許多身份證顯示爲圖像。 當用戶點擊圖像時,我想將圖像更改爲顯示卡片「背面」的圖像。在相冊中更改圖片

我已經將對象的數組列表綁定到了庫中,每個對象都包含正面和背面圖像。

我有兩個圖像視圖,一個用於正面,另一個用於背面圖像。該畫廊最初將顯示所有正面圖像(「背面」圖像視圖可見性設置爲「無效」)。我的想法是在用戶點擊時更改相關圖像視圖的可見性。

大概就我所知,我不確定如何實現點擊功能來改變視圖。

任何援助將不勝感激。

+0

你不能直接更改adapterview中的視圖(圖庫是)。您需要更改數據本身,例如添加一個布爾字段,並在getView方法中對其進行操作。 – njzk2

+0

謝謝。你能再詳細說明你的意思嗎? – Serpentine

+0

我假設你有一個畫廊和一個適配器?在適配器中,處理對象以呈現視圖(在getview中)?那麼你需要在你處理的對象中添加一些東西來指示對象的檢查狀態。 – njzk2

回答

0

GalleryAdapterView特殊化,其中還包含ListViewSpinnerGridView ...所有這些共同具有顯示n倍的視圖不同的數據相同的「種類」。

這些特定視圖使用Adapter來處理視圖創建和填充過程。在適配器上調用getView方法,爲該類提供用於爲特定行(單元格,圖庫項目...)創建視圖的數據。

AdapterView認爲有必要時調用getView方法,開發人員無法控制哪個視圖被創建或何時被創建。

因此,直接修改AdapterView的孩子實際上是不可能的。這會導致修改被任意覆蓋,甚至轉移到視圖的另一行。

相反,要對子視圖執行操作,必須對用於填充視圖的數據執行操作。 (請注意,這強制執行MVC模型,因爲視圖仍然是模型的反映,而不是由控制器操縱。)

在此特定示例中,視圖基於checked狀態顯示不同的圖像的數據。爲了實現這一目標,一個checked成員添加到模型:

public class MyModel { 
    // ... Other members 
    public boolean checked = false; 
} 

使用在getView該值:

@Override 
public View getView(int position, View convertView, View parent) { 
    MyModel current = getItem(position); 
    // ... Inflate and populate 
    if (current.checked) { 
     // Specific checked behavior 
    } else { 
     // Not checked behavior 
    } 
} 

checked值是在控制器中進行修改,可能是OnItemClickListener

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    // Here, there can be several ways to access the clicked item. 
    // I assume myAdapter is the adapter used for the gallery 
    MyModel current = myAdapter.get(position); 
    current.checked = !current.checked; 
    myAdapter.notifyDataSetChanged(); 
}