有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,以及点击时显示的描述 –