Android 第二次单击时未设置值
实际上,我正在尝试实现。我有一个小问题,当我点击Android 第二次单击时未设置值,android,android-layout,android-view,onclicklistener,Android,Android Layout,Android View,Onclicklistener,实际上,我正在尝试实现。我有一个小问题,当我点击Image Circle 1按钮时,在当时Passcode字段更改第一个字段的背景色。但是当我点击图像圈1按钮时,第二个密码字段没有变化。我认为getId()没有正常工作。我可以知道实现我目标的正确方法吗?也许这个问题太基本了,但是我没有找到任何合适的解决方案。请帮我解决。请检查此语句View.OnClickListener imgButtonHandlerone=newview.OnClickListener() 这是我的密码: public c
Image Circle 1
按钮时,在当时Passcode
字段更改第一个字段的背景色。但是当我点击图像圈1按钮时,第二个密码
字段没有变化。我认为getId()
没有正常工作。我可以知道实现我目标的正确方法吗?也许这个问题太基本了,但是我没有找到任何合适的解决方案。请帮我解决。请检查此语句View.OnClickListener imgButtonHandlerone=newview.OnClickListener()
这是我的密码:
public class UserPasscode extends Activity {
ImageButton Imagepassone ;
ImageButton Imagepasstwo ;
ImageButton Imagepassthree ;
ImageView image;
ImageView image2;
ImageView image3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_passcode);
ActionBar ab = getActionBar();
ab.setDisplayUseLogoEnabled(false);
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
ab.setCustomView(R.layout.actionbar);
ab.setDisplayHomeAsUpEnabled(true);
ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#33CCFF"));
ab.setBackgroundDrawable(colorDrawable);
Imagepassone = (ImageButton) findViewById(R.id.ButtonPassOne);
Imagepasstwo = (ImageButton) findViewById(R.id.ButtonPassTwo);
Imagepassthree = (ImageButton) findViewById(R.id.ButtonPassThree);
Imagepassone.setOnClickListener(imgButtonHandlerone);
Imagepasstwo.setOnClickListener(imgButtonHandlertwo);
Imagepassthree.setOnClickListener(imgButtonHandlerthree);
image = (ImageView) findViewById(R.id.imagefirstpasscode);
image2 = (ImageView) findViewById(R.id.imagesecondpasscode);
image3=(ImageView)findViewById(R.id.imagethirdpasscode);
}
View.OnClickListener imgButtonHandlerone = new View.OnClickListener() {
public void onClick(View v) {
if(v.isPressed()){
int d ;
d = R.drawable.passselect;
if(image.getId()!=d)
{
image.setImageResource(d);
}
if(image.getId()==d && (image2.getId()!=d))
{
image2.setImageResource(d);
}
}
}
};
View.OnClickListener imgButtonHandlertwo = new View.OnClickListener() {
public void onClick(View v) {
}
};
View.OnClickListener imgButtonHandlerthree = new View.OnClickListener() {
public void onClick(View v) {
}
};
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(this, UserDobActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
moveTaskToBack(true);
UserPasscode.this.finish();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.user_passcode, menu);
return true;
}}
d
不是id
。我建议你这样做:
// same listener for everyone
Imagepassone.setOnClickListener(imgButtonHandler);
Imagepasstwo.setOnClickListener(imgButtonHandler);
Imagepassthree.setOnClickListener(imgButtonHandler);
//...
// switch id for each view inside the same listener
View.OnClickListener imgButtonHandler = new View.OnClickListener() {
public void onClick(View v) {
// check the view clicked by id
if(v.getId() == R.id.Imagepassone) {
// do something like change background
if(image.getBackground() != getResources().getDrawable(R.drawable.passselect)) {
image.setBackgroundResource(R.drawable.passselect);
} else if((image.getBackground() == getResources().getDrawable(R.drawable.passselect)) &&
(image2.getBackground() != getResources().getDrawable(R.drawable.passselect)) {
image.setBackgroundResource(R.drawable.passselect);
}
} else if(v.getId() == R.id.Imagepasstwo) {
// do something
} else if(v.getId() == R.id.Imagepassthree) {
// do something
}
}
};
但是我认为这不是一个合适的方式。。
正如我所看到和理解的,你的图像(图像,图像2,图像3)是顶部圆形的图像,对吗?如果是,您可以尝试通过每次单击来更改上面这些图标的步骤并更改其背景。我认为最好使用本地int
并更改步骤。像这样的方法应该会奏效:
// local variable just below ImageView image3; line
private int nbStep = 0;
// ...
Imagepassone.setOnClickListener(imgButtonHandler);
Imagepasstwo.setOnClickListener(imgButtonHandler);
Imagepassthree.setOnClickListener(imgButtonHandler);
// listener
View.OnClickListener imgButtonHandler = new View.OnClickListener() {
public void onClick(View v) {
// check id like above
if(v.getId() == R.id.Imagepassone) {
// augment the local int
nbStep++;
// call a general method to check the background with int
changeStepBackground(nbStep);
}
}
});
public void changeStepBackground(int i) {
// four step switch
switch(i) {
case 1:
image.setBackgroundResource(R.drawable.passselect);
break;
case 2:
image2.setBackgroundResource(R.drawable.passselect);
break;
case 3:
image3.setBackgroundResource(R.drawable.passselect);
break;
case 4:
image4.setBackgroundResource(R.drawable.passselect);
break;
}
}
我希望我能理解清楚,这会有所帮助。您将布局ID(image.getId())和资源ID(R.drawable.passelect)混为一谈。“图像圈1按钮”和“图像圈1图像按钮”之间有什么区别?这句话毫无意义。另外,“这个功能”不是每个人都知道的,我现在甚至不知道你想要实现什么。“图像圈1按钮”和“图像圈1图像按钮”都是一样的。你最好澄清你的问题。我编辑代码。省略getId()。但不工作,先生。请检查此项。很高兴帮助您!谢谢你的回答。快乐编码!