我有一個畫廊,我將許多身份證顯示爲圖像。 當用戶點擊圖像時,我想將圖像更改爲顯示卡片「背面」的圖像。在相冊中更改圖片
我已經將對象的數組列表綁定到了庫中,每個對象都包含正面和背面圖像。
我有兩個圖像視圖,一個用於正面,另一個用於背面圖像。該畫廊最初將顯示所有正面圖像(「背面」圖像視圖可見性設置爲「無效」)。我的想法是在用戶點擊時更改相關圖像視圖的可見性。
大概就我所知,我不確定如何實現點擊功能來改變視圖。
任何援助將不勝感激。
我有一個畫廊,我將許多身份證顯示爲圖像。 當用戶點擊圖像時,我想將圖像更改爲顯示卡片「背面」的圖像。在相冊中更改圖片
我已經將對象的數組列表綁定到了庫中,每個對象都包含正面和背面圖像。
我有兩個圖像視圖,一個用於正面,另一個用於背面圖像。該畫廊最初將顯示所有正面圖像(「背面」圖像視圖可見性設置爲「無效」)。我的想法是在用戶點擊時更改相關圖像視圖的可見性。
大概就我所知,我不確定如何實現點擊功能來改變視圖。
任何援助將不勝感激。
甲Gallery
是AdapterView
特殊化,其中還包含ListView
,Spinner
,GridView
...所有這些共同具有顯示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();
}
你不能直接更改adapterview中的視圖(圖庫是)。您需要更改數據本身,例如添加一個布爾字段,並在getView方法中對其進行操作。 – njzk2
謝謝。你能再詳細說明你的意思嗎? – Serpentine
我假設你有一個畫廊和一個適配器?在適配器中,處理對象以呈現視圖(在getview中)?那麼你需要在你處理的對象中添加一些東西來指示對象的檢查狀態。 – njzk2