有2級到summrize此代碼
1-使用1的onClick()的所有ImageViews:這涉及
1.A實施OnClickListener
和不使用anonymous inner class
讓你的活動或片段implements OnClickListener
並覆蓋onClick()
public class MyActivity extends Activity implements OnClickListener {
//class implementation
@override
public void onClick(View view){
}
}
使用this
作爲OnClickLister爲方法setOnClickListener()
:
ivCalArrow1.setOnClickListener(this);//this here refers to MyActivity
ivCalArrow2.setOnClickListener(this);//this here refers to MyActivity
//and so on ...
灣認識點擊源(其中的ImageView)所產生的動作) 則需要基於該比較視圖id與8個ImageViews ID和執行正確的代碼:
@override
public void onClick(View view){
if(view.getId() == ivCalArrow1.getId()){
//do what needed on ivCalArrow1
}else if(view.getId() == ivCalArrow2.getId()){
//do what needed on ivCalArrow2
}
//and so on ... for 3 4 5 6 7 8
}
2-使onClick()
一般處理click正確:這涉及使用數組而不是單個變量命名爲1 2 3,如cal1Clicked
cal2Clicked
...或tvDescription1,tvDescription2 ...
這可以通過多種方式來完成,也可能是複雜的理解和維護,所以儘量做到明確
你可能需要一個地圖,ImageView.getId
關鍵和一定的價值基礎上,你需要什麼
例如, 布爾變量calXClicked
可以是你可以使用一個HashMap
,該鍵爲礦灰的標識符和值是boolean
用於點擊編輯狀態 從我的理解爲cal1Clicked
標識符是ImageView的本身ivCalArrow1
這樣:
聲明這個類範圍的
HashMap<int, boolean> calClickedStatus = new HashMap();
一個在onCreate()
補充一點:
//assuming all boolean values are false on first create of activity
calClickedStatus.put(ivCalArrow1.getId,false);
calClickedStatus.put(ivCalArrow2.getId,false);
calClickedStatus.put(ivCalArrow3.getId,false); // and so on
現在
在的onClick( )您將使用view.getId作爲查找所需的其他數據的關鍵 無需查找點擊來源是什麼,因爲您將使用鍵查找它(vi ew.getId)
@override
public void onClick(View view){
if (!calClickedStatus.get(view.getId())) {
calClickedStatus.put(view.getId(), true);
//the view here is actually the clicked ImageView, so just cast it and use it, replace this
//ivCalArrow1.setImageResource(R.drawable.arrow_symbol_up);
//with this
((ImageView)view).setImageResource(R.drawable.arrow_symbol_up);
//now for this, you may want to use an array of TextView to hold tvDescription1, tvDescription2 ...
//and make a map to link each tvDescriptionX to the index of licked image
tvDescription1.setVisibility(View.VISIBLE);
} else {
//do same changes here too
calClickedStatus.put(view.getId(), false);
ivCalArrow1.setImageResource(R.drawable.arrow_symbol_down);
tvDescription1.setVisibility(View.GONE);
}
}
正如我剛纔所說,這可能是複雜的,可能很難解釋 並且它可以在5月的方式來完成,所以這只是指導您的概念,剩下的就你
請向我們展示您的代碼。 –
'總結'到哪個級別?對8個圖像使用1'onClick()'方法?重構邏輯的實現以使其對於所有8個圖像是通用的?我們需要查看代碼,如果它們完全相同 - 就像你說的那樣 - 發佈onClick()方法的內容並簡要說明它的作用 – Yazan
@JörnBuitink對於我的糟糕解釋感到抱歉。這是我的第一個問題。我添加了第一個OnClickListener的代碼。爲了更好的理解: 我得到了一個實驗片段,我可以在其中添加8個變量max。每個變量都有幾個textview,還有一個ImageView,它包含有關變量的更多信息。當ImageView被點擊時它應該顯示信息。我收到了一個容器類,其中包含變量的所有小部件,如textviews和imageview,以及點擊時顯示的描述 –