Android-通过ID或标签在多个ImageView上切换可见/不可见
我有四个ImageView,它们在活动开始时设置为不可见(或者更确切地说,在行膨胀时)。我想按下一个按钮,使它们都变得可见(并随后作为onclick操作…)。我有以下摘要代码,但每当我尝试访问除上一个以外的任何其他imageview时,都会不断出错Android-通过ID或标签在多个ImageView上切换可见/不可见,android,imageview,Android,Imageview,我有四个ImageView,它们在活动开始时设置为不可见(或者更确切地说,在行膨胀时)。我想按下一个按钮,使它们都变得可见(并随后作为onclick操作…)。我有以下摘要代码,但每当我尝试访问除上一个以外的任何其他imageview时,都会不断出错 public class xx { private ImageView up; @Override public View getView(int position, View convertView, Vi
public class xx {
private ImageView up;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Log.i(TAG, "excersizeAdapter getView");
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
Excersize e = items.get(position);
if (e != null) {
TextView exTitle = (TextView) v.findViewById(R.id.ex_type_title);
TextView exOn = (TextView) v.findViewById(R.id.ex_on_title);
TextView exRestAmount = (TextView) v.findViewById(R.id.ex_rest_amount);
TextView exSequence = (TextView) v.findViewById(R.id.ex_sequence);
up = (ImageView) v.findViewById(R.id.moveup);
down = (ImageView) v.findViewById(R.id.movedown);
if (exTitle !=null) {
exTitle.setText(e.getTypeTitle());
}
if (exOn !=null) {
exOn.setText("On: "+e.getTypeOn());
}
if (exRestAmount !=null) {
exRestAmount.setText(e.getRestAmount().toString());
}
if (exSequence !=null) {
exSequence.setText(e.getSequence().toString());
up.setTag(8881);
down.setTag(8882);
up.setId(((Integer)e.getSequence()));
down.setId(((Integer)e.getSequence()));
Log.i(TAG, "up,down values=" +e.getSequence());
}
}
return v;
}
}
public void toggleReorderButtons() {
up.findViewById(2).setVisibility(View.VISIBLE);
up.setVisibility(View.VISIBLE);
up.setOnClickListener(this);
}
}
好的,这是精简的代码,但在makevisinvis方法中,up.findview…
会导致崩溃,up.setvis等将只打开添加到我的活动中的最后一个
我也尝试了以下方法,但没有成功
ImageView upper = (ImageView) up.findViewById(2);
upper.setVisibility(View.VISIBLE);
一个可爱的错误转储:
04-21 09:10:55.650: W/dalvikvm(22392): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
04-21 09:10:55.675: E/AndroidRuntime(22392): FATAL EXCEPTION: main
04-21 09:10:55.675: E/AndroidRuntime(22392): java.lang.NullPointerException
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.mediabarltd.digittrainer.ProgramDisplay.toggleReorderButtons(ProgramDisplay.java:437)
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.mediabarltd.digittrainer.ProgramDisplay.onClick(ProgramDisplay.java:391)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.view.View.performClick(View.java:2538)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.view.View$PerformClick.run(View.java:9152)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.os.Handler.handleCallback(Handler.java:587)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.os.Handler.dispatchMessage(Handler.java:92)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.os.Looper.loop(Looper.java:130)
04-21 09:10:55.675: E/AndroidRuntime(22392): at android.app.ActivityThread.main(ActivityThread.java:3691)
04-21 09:10:55.675: E/AndroidRuntime(22392): at java.lang.reflect.Method.invokeNative(Native Method)
04-21 09:10:55.675: E/AndroidRuntime(22392): at java.lang.reflect.Method.invoke(Method.java:507)
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
04-21 09:10:55.675: E/AndroidRuntime(22392): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
04-21 09:10:55.675: E/AndroidRuntime(22392): at dalvik.system.NativeStart.main(Native Method)
我做了一些认真的观察和彻底的返工。但是
基本上,我遵循了教程,然后实现了中描述的整洁的“技巧”
(我真的很难理解这一点。)您必须为ImageView提供一个ID,如
android:id="@+id/some_name"
然后发现它是这样的:
up.findViewById(R.id.some_name);
使用以下命令:
int i = (int) up.getTag();
if (i == 8881) {
//Do something here
}
您将
up
定义为类成员,并在每次调用getView
时重新初始化它-因此它总是指向创建的最后一个图像视图。此外,我不确定调用up
的findViewById
是否正确:而是在getView
内设置其OnClickListener
,并在每次单击时在其所属的布局内查找所需的视图 根据发布的日志,NPE不在“makevisinvis”中发生。你能再核对一下吗?另外,你能发布定义/inits up和down对象的代码吗/对不起,我的examlpe太笨了,我在写的时候更改了方法名。我将更新…我在初始充气过程中已经这样做了“up=(ImageView)v.findViewById(R.id.moveup);”这就是你的意思,还是我需要再次这样做?在我这样做之后,我分配了ID,并且认为我可以使用它来引用它?(我还在上面添加了这一行)然后如何分别引用imageview的每个版本?我想这就是setId的作用所在?在构建行数据的“public View getView”中,我使用数据库中的一个唯一字段,并将其分配给up imageview的Id。这是设置ID唯一,否?使用setTag方法,然后使用getTag方法。@ZazGmy这是我的第一个探索途径,但我找不到如何“使用”getTag。i、 e.up.getTag(8881).setvisible(View.VISIBLE);对我来说不存在?好的,我可以看到它如何作用于我的标记的存在,但是使用这个我如何将我的所有4个up imageview设置为可见?获取每个imageview的标记并使用嵌套条件。我想你已经了解了一些东西。我刚刚做了一些检查,ID总是最后一个设置的ID。它一定是覆盖了其他的..谢谢你的帮助,我现在已经整理好了我的代码,并将我的解决方案包含在我的原始帖子中。