我已通过以下方式创建了三个图像视图: ImageView imagev = new ImageView(getActivity());
现在每当我点击这些(每一个)时,我想从字符串数组中加载一些信息。问题是这些图像视图是使用另一个包含drawables的数组创建的。
所以我的问题是,我知道如果知道它具有drawable(许多中的一个),我怎么能在不知道这些按钮的id的情况下进行onclick,就我所知的那样随机生成了?我正在考虑尝试嵌套这些图像视图,每个图像视图都在linearlayout中并附加onclicklistener,但它似乎是无效的,也不是优雅的尝试。
修改
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.majoraracane, container, false);
ImageView cardpicker = (ImageView)rootView.findViewById(R.id.cardpick);
ImageView imagev = new ImageView(getActivity());
cardpicker.setOnClickListener(this);
Resources resources = getResources();
imagesCard = resources.obtainTypedArray(R.array.MajorArcana);
names = resources.getStringArray(R.array.majorarcane);
mt = new MyTask();
mt.execute();
return rootView;
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.cardpick:
rangen();
break;
}
}
public void GenNum(){
int min = 0;
int max = 21;
Random r = new Random();
i1 = r.nextInt(max - min + 1) + min;
String wtf = names[i1];
Log.e("random number", "generated " + i1);
if (Arrays.asList(haha).contains(i1)){
Log.e("HAHAH", "SAME NUMBER");
GenNum();
}
else {
ImageView imagev = new ImageView(getActivity());
mycards.add(i1);
int cor = i1;
haha = new Integer[mycards.size()];
mycards.toArray(haha);
imagev.setImageResource(imagesCard.getResourceId(cor, R.drawable.ace_of_cups));
int height = 230;
int width = 135;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height);
params.setMargins(5,5,5,5);
params.gravity = Gravity.CENTER;
imagev.setLayoutParams(params);
LinearLayout mycardslayout = (LinearLayout)getActivity().findViewById(R.id.mycardslayout);
imagev.animate().alpha(1.0f).setDuration(100).start();
mycardslayout.addView(imagev);
// imagesCard.recycle();
}
}
这就是我解决它的方法: 创建了int newid。 在创建新imageview的过程中,我将newid增加了1。 然后在我的onclick中检索点击项目的ID。然后比较它。
这就是它的样子:
newid = newid +1;
imagev.setId(newid);
imagev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int ccheck = imagev.getId();
if(ccheck == 1){
Log.e("Just clicked on", "first" + ccheck);
} else if(ccheck == 2){
Log.e("Just clicked on", "second" + ccheck);
} else if(ccheck == 3){
Log.e("Just clicked on", "third" + ccheck);
}
}
});
不是最佳实施,但它正在发挥作用。
答案 0 :(得分:1)
由于您是以编程方式创建图像视图,因此您还可以通过编程方式设置onClick侦听器,例如:
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Do whatever you want (imageView can be changed here)
}
});
答案 1 :(得分:1)
要将onClickListener设置为imagev
,您有两个选项
1-在imagev
上设置一个新的监听器,如下所示:
imagev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do you work
}
});
2-使用imagev.setId(/*int id*/);
为该视图设置ID,然后按照cardpicker
答案 2 :(得分:0)
如果在运行时创建视图,则可以保留对视图的引用并以编程方式设置clickListeners