本文将为您提供关于java–复选框中的OnclickListener(AndroidStudio)的详细介绍,我们还将为您解释java复选框事件处理的相关知识,同时,我们还将为您提供关于Android
本文将为您提供关于java – 复选框中的OnclickListener(Android Studio)的详细介绍,我们还将为您解释java复选框事件处理的相关知识,同时,我们还将为您提供关于Android EditText OnClickListener问题、Android ListView的OnItemClickListener详解、Android setOnItemClickListener vs setOnClickListener、Android Studio 中的 setOnClickListener 错误的实用信息。
本文目录一览:- java – 复选框中的OnclickListener(Android Studio)(java复选框事件处理)
- Android EditText OnClickListener问题
- Android ListView的OnItemClickListener详解
- Android setOnItemClickListener vs setOnClickListener
- Android Studio 中的 setOnClickListener 错误
java – 复选框中的OnclickListener(Android Studio)(java复选框事件处理)
这是我的代码的一部分,其中包括CheckBox(ChckBoxNo):
final CheckBox ChckBoxNo = (CheckBox)promptsView.findViewById(R.id.ChkBoxNo);
ChckBoxNo.setChecked(true);
ChckBoxNo.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ChckBoxNo.isChecked()) {
ChckBoxNo.setChecked(false);
}
else if (!ChckBoxNo.isChecked())
{
ChckBoxNo.setChecked(true);
}
}
});
在开始时,我在复选框上为isChecked()方法设置了true,然后在复选框上实现了onclicklistener.
当我运行应用程序时,复选框是Checked,因为我定义了eralier,但是当我单击复选框时,它被取消选中,然后再次进行了不必要的检查(我没有再次复选复选框!)
我该怎么做才能解决这个问题,我的代码有什么问题?
谢谢!
解决方法:
CheckBox将自动处理“检查”过程 – 您无需自行管理标准用法.
从文档中查看this example.在这里,当捕获click事件时,它们正在基于isChecked()状态进行操作.
Android EditText OnClickListener问题
我有销售申请.当用户单击EditText时,弹出计算器想要显示.在我的情况下,当用户双击EditTxt onClickLister时,它只显示弹出计算器.
这是myEditText
final EditText txtQty = new EditText(this);
txtQty.setHeight(1);
if(productList.get(i).getQty() != 0.00){
txtQty.setText(Double.toString(productList.get(i).getQty()));
}
txtQty.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,42));
txtQty.setTextSize(9);
txtQty.setId(i);
txtQty.setHint("0");
txtQty.setClickable(true);
txtQty.setSelected(true);
txtQty.setSelectAllOnFocus(true);
txtQty.setInputType(InputType.TYPE_NULL);
tr.addView(txtQty);
这是我的代码:
txtQty.setonClickListener(new OnClickListener() {
public void onClick(View v) {
String productCode= txtCode.getText().toString();
double price = getProductPrice(productCode).getPrice();
txtPrice.setText(""+price);
if(invPriceEdit.equals("3")){
if(editPrice.getText().toString().equals("") || editPrice.getText().toString().equals("0.00") || editPrice.getText().toString().equals("0") || editPrice.getText().toString().equals("0.0")){
txtPrice.setText(""+ price);
editPrice.setText("" +price);
}else{
String ePrice = editPrice.getText().toString();
editPrice.setText("" +ePrice);
}
}
keyAmount = new StringBuffer();
if(keyAmount.length() > 0){
keyAmount.delete(0, keyAmount.length());
}
int[] origin = new int[2];
v.getLocationOnScreen(origin);
final int xVal = origin[0];
final int yVal = origin[1] ;
dialog = new Dialog(SalesActivityGroup.group.getParent());
dialog.requestwindowFeature(Window.FEATURE_NO_TITLE);
View vLoad = LayoutInflater.from(SalesActivityGroup.group.getParent()).inflate(R.layout.key_pad, null);
dialog.setContentView(vLoad);
android.view.WindowManager.LayoutParams lp= dialog.getwindow().getAttributes();
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
lp.x = xVal;
lp.y = yVal;
lp.width = LayoutParams.WRAP_CONTENT;
lp.height = LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.TOP | Gravity.LEFT;
lp.dimAmount = 0;
dialog.getwindow().setAttributes(lp);
dialog.setCancelable(false);
keyamdisplay = (TextView)dialog.findViewById(R.id.keyamdisplay);
Button txtone = (Button)dialog.findViewById(R.id.txtone);
txtone.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("1");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txttwo = (Button)dialog.findViewById(R.id.txttwo);
txttwo.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("2");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtthree = (Button)dialog.findViewById(R.id.txtthree);
txtthree.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("3");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtfour = (Button)dialog.findViewById(R.id.txtfour);
txtfour.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("4");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtfive = (Button)dialog.findViewById(R.id.txtfive);
txtfive.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("5");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtsix = (Button)dialog.findViewById(R.id.txtsix);
txtsix.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("6");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtseven = (Button)dialog.findViewById(R.id.txtseven);
txtseven.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("7");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txteight = (Button)dialog.findViewById(R.id.txteight);
txteight.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("8");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtnine = (Button)dialog.findViewById(R.id.txtnine);
txtnine.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("9");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtZero = (Button)dialog.findViewById(R.id.txtZero);
txtZero.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append("0");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button txtdot = (Button)dialog.findViewById(R.id.txtdot);
txtdot.setEnabled(false);
txtdot.setonClickListener(new OnClickListener() {
public void onClick(View v) {
keyAmount.append(".");
keyamdisplay.setText("" + keyAmount.toString());
}
});
Button diaDelete = (Button)dialog.findViewById(R.id.diaDelete);
diaDelete.setonClickListener(new OnClickListener() {
public void onClick(View v) {
if(keyAmount.length() > 0){
keyAmount.delete(keyAmount.length()-1, keyAmount.length());
}
keyamdisplay.setText("" + keyAmount.toString());
}
});
ImageButton imageSmileExit = (ImageButton)dialog.findViewById(R.id.imageSmileExit);
imageSmileExit.setonClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
Button txtDialogoK = (Button)dialog.findViewById(R.id.txtDialogoK);
txtDialogoK.setonClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
getwindow().setSoftInputMode(WindowManager.LayoutParams.soFT_INPUT_STATE_ALWAYS_HIDDEN);
}
}
这是销售代表的一个问题.他们希望双击每一个产品clcik.
我想在用户选择textEditor时显示弹出计算器. (不要双击).
这是我的代码:
final EditText txtQty = new EditText(this);
txtQty.setHeight(1);
if(productList.get(i).getQty() != 0.00){
txtQty.setText(Double.toString(productList.get(i).getQty()));
}
txtQty.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,42));
txtQty.setTextSize(9);
txtQty.setId(i);
txtQty.setHint("0");
txtQty.setInputType(InputType.TYPE_NULL);
tr.addView(txtQty);
问题是:
`TableLayout包含产品信息列表
当用户点击Qty时弹出计算器
输入值后,它会清除那一行EditText的数量和数量.它转到第一行EditText’
这是我的屏幕图片
解决方法:
为什么要在EditText上添加onClickEvent,
对于EditText,使用onFocuschangelistener()会有意义,一旦edittext获得焦点,它就会激活对话框.在onFocuschangelistener()中,您可以检查EditText是获得焦点还是失去焦点.
Android ListView的OnItemClickListener详解
我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。本文主要在于对OnItemClickListener的position和id参数做详细的解释,我相信有些人在这上面走了些弯路。
先来看一下官方的文档
position The position of the view in the adapter.
id The row id of the item that was clicked.
而这两行字并没有解释清楚position和id的区别。另外,我们还有个Adapter的getView方法。
public abstract View getView (int position,View convertView,ViewGroup parent)
这里也有一个position。
初步接触ListView的同学,一般会直接继承ArrayAdapter,然后(比如我),就想当然的认为OnItemClick的position和getView的position是一样的啊。于是我们就getItem(position)来获取相应的数据。
那么这段代码有没有错呢?如果有错的话,在什么情况会出错呢?
第一个问题的答案是,当我们为ListView添加headerView或者footerView之后,这段代码就不一定是我们想要的了。
出现问题的原因在于,当我们为ListView添加headerView或者footerView之后,ListView在setAdapter时,做了一些事情,这导致,Adapter和OnItemClickListener中的position含义发生了变化。
我们可以来看看ListView中setAdapter的实现
public void setAdapter(listadapter adapter) { if (mAdapter != null && mDataSetobserver != null) { mAdapter.unregisterDataSetobserver(mDataSetobserver); } resetList(); mRecycler.clear(); if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) { mAdapter = new HeaderViewlistadapter(mHeaderViewInfos,mFooterViewInfos,adapter); } else { mAdapter = adapter; }
可以看出,如果这个ListView存在headerView或者footerView的话,那么会在我们传入的adapter外面在封装一层HeaderViewlistadapter,这是一个专门用来自动处理headerView和footerView的adapter。在ListView中,本身不区分headerView,footerView。ListView可以理解成是只负责管理一组View的数组的UI(ViewGroup),headerView和footerView都委托给HeaderViewlistadapter来处理。(从这里也可以看到为什么api文档中提到,addFooterView和addHeaderView要在setAdapter函数之前调用,如果在之后调用,那么就不会生成HeaderViewlistadapter,从而导致显示不出headerView和footerView)。
回到开头的问题,position和id有啥区别。为此,我们找一下position和id是怎么传进来的。
OnItemClickListener在android.widget.AdapterView的public boolean performItemClick(View view,int position,long id)函数中被调用。
performItemClick在android.widget.AbsListView.PerformClick.run() 中被调用
private class PerformClick extends WindowRunnnable implements Runnable { int mClickMotionPosition; public void run() { // The data has changed since we posted this action in the event queue,// bail out before bad things happen if (mDataChanged) return; final listadapter adapter = mAdapter; final int motionPosition = mClickMotionPosition; if (adapter != null && mItemCount > 0 && motionPosition != INVALID_<strong>POSITION</strong> && motionPosition < adapter.getCount() && sameWindow()) { final View view = getChildAt(motionPosition - mFirstPosition); // If there is no view,something bad happened (the view scrolled off the // screen,etc.) and we should cancel the click if (view != null) { performItemClick(view,motionPosition,adapter.getItemId(motionPosition)); } } } }
可以看到,position事实上就是ListView中被点击的view的位置。注意,在ListView中是不负责处理headerView和footViewer的,所以,这个位置应该是这个被点击的view在数组[所有的headerView,用户添加的view,所有的footerView]中的位置(请自行参考HeaderViewlistadapter的getView实现)。而id是来自于adapter.getItemId(position)。
对于ArrayAdapter的getItemId函数,实现就是return position。id和position是一致的。
然而,对于HeaderViewlistadapter
public long getItemId(int <strong>position</strong>) { int numHeaders = getHeadersCount(); if (mAdapter != null && <strong>position</strong> >= numHeaders) { int adjposition = <strong>position</strong> - numHeaders; int adapterCount = mAdapter.getCount(); if (adjposition < adapterCount) { return mAdapter.getItemId(adjposition); } } return -1; }
实现逻辑是,如果position指向了headerView或footerView,那么返回-1,否则,将返回在用户view数组的位置。
也就是说
id=position-headerView的个数(id < headerviewer的个数+用户view的个数),否则=-1
因此,OnItemClickListener的正确实现如下:
void onItemClick(AdapterViewparent,View view,int <strong>position</strong>,long id){ if(id == -1) { // 点击的是headerView或者<strong>footerView</strong> return; } int realPosition=(int)id; T item=getItem(realPosition); // 响应代码 }
相关阅读:
Android 中ListView setOnItemClickListener点击无效原因分析
以上所述是小编给大家介绍的Android ListView的OnItemClickListener详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
Android setOnItemClickListener vs setOnClickListener
>使用setTag()为Adapter中的列表项设置类型,然后为列表设置setonItemClickListener(),并使用视图的getTag()来区分类型,如下所示:
listview.setonItemClickListener(new OnItemClcikListener(){});
>在适配器内部,getView()期间为每个项单独设置setonClickListener(),如下所示:
item.setonClickListener(new OnClickListener(){});
有什么区别,哪一个更受欢迎?
解决方法
如果您仍然想管理OnClickListener,我将告诉为什么OnItemClickListener比OnClickListener好得多.
一旦你开始滚动ListView项目将开始重用,你最终创建了很多OnClickListener.不要担心,这不是内存泄漏,因为GC将会出现并收集这些内容,但您也不应该感到安全,因为GC会暂停您的活动,即使它是相当大的秒数.
因此,除非您为单个列表项计划了不同的内容,否则我将使用OnItemClickListener.
如果您需要创建每个项目的特定部分是可点击的,或者希望为给定项目执行多个操作,那么最好将这些操作收集到一次创建的OnClickListener中,然后附加到每个getView()中的项目.您可以通过附加有关单击操作的元数据来区分单击的项目,也可以使用setTag()将位置列表到视图本身.
Android Studio 中的 setOnClickListener 错误
如何解决Android Studio 中的 setOnClickListener 错误?
当我尝试运行我的 kotlin 活动时出现此错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ''void android.widget.ImageView.setonClickListener(android.view.View$OnClickListener)'' on a null object reference
at com.example.b1.activity.Registeractivity.onCreate(Registeractivity.kt:29)
at android.app.Activity.performCreate(Activity.java:8146)
at android.app.Activity.performCreate(Activity.java:8130)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3660)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3858)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:140)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:100)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2288)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:254)
at android.app.ActivityThread.main(ActivityThread.java:8190)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
我尝试删除我的一些代码以找出导致此错误的原因,我发现:
back_button.setonClickListener{
val intent = Intent(this@Registeractivity,LoginActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)
}
这个 back_button 点击给我带来了麻烦。问题是,这段代码已经在我的项目中一段时间了,直到今天才引起任何问题。有人知道为什么会这样吗?
我的完整代码如下:
package com.example.b1.activity
import android.content.Intent
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.*
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.util.Patterns
import android.view.View
import android.widget.Toast
import com.example.b1.R
import com.example.b1.firestore.FirestoreClass
import com.example.b1.model.User
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import kotlinx.android.synthetic.main.action_bar.*
import kotlinx.android.synthetic.main.daftar.*
import kotlinx.android.synthetic.main.masuk.*
class Registeractivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.daftar)
back_button.setonClickListener{
val intent = Intent(this@Registeractivity,LoginActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)
}
button_login_sekarang.setonClickListener {
startActivity(Intent( this@Registeractivity,LoginActivity::class.java))
finish()
}
buatAkun.setonClickListener {
when
{
!syaratketentuan.isChecked->{
Toast.makeText(
this@Registeractivity,"Harap Menyetujui Syarat dan Ketentuan",Toast.LENGTH_SHORT)
.show()
}
TextUtils.isEmpty(tvUsername.text.toString().trim{it<= '' '' })->{
Toast.makeText(
this@Registeractivity,"Isi Username",Toast.LENGTH_SHORT)
.show()
}
TextUtils.isEmpty(tvAlamatemail.text.toString().trim{it<= '' '' })->{
Toast.makeText(
this@Registeractivity,"Isi Email",Toast.LENGTH_SHORT)
.show()
}
!Patterns.EMAIL_ADDRESS.matcher(tvAlamatemail.getText().toString()).matches()->{
Toast.makeText(
this@Registeractivity,"Invalid Email",Toast.LENGTH_SHORT)
.show()
}
TextUtils.isEmpty(tvNomorseluler.text.toString().trim{it<= '' '' })->{
Toast.makeText(
this@Registeractivity,"Isi Nomor Seluler",Toast.LENGTH_SHORT)
.show()
}
TextUtils.isEmpty(Password.text.toString().trim{it<= '' '' })->{
Toast.makeText(
this@Registeractivity,Toast.LENGTH_SHORT)
.show()
}
else ->{
val username: String =tvUsername.text.toString().trim{it<= '' ''}
val email: String =tvAlamatemail.text.toString().trim{it<= '' ''}
val nomorSeluler: String =tvNomorseluler.text.toString().trim{it<= '' ''}
val password: String =Password.text.toString().trim{it<= '' ''}
if(syaratketentuan.isChecked){
FirebaseAuth.getInstance().createuserWithEmailAndPassword(email,password).addOnCompleteListener(
{task ->
if(task.isSuccessful){
val firebaseUser: FirebaseUser = task.result!!.user!!
Toast.makeText(
this@Registeractivity,"Berhasil Mendaftar",Toast.LENGTH_SHORT
).show()
val intent = Intent(this@Registeractivity,LoginActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
intent.putExtra("user_id",firebaseUser.uid)
intent.putExtra("email_id",email)
startActivity(intent)
finish()
}else{
Toast.makeText(
this@Registeractivity,Toast.LENGTH_SHORT
).show()
}
}
)
}
}
}
}
val text ="Saya menyetujui syarat dan ketentuan aplikasi ini"
val spanString= SpannableString(text)
val clickableSpan=object : ClickableSpan()
{
override fun onClick(widget: View) {
Toast.makeText(this@Registeractivity,"Belum makai syarat",Toast.LENGTH_SHORT).show()
}
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color=Color.RED
}
}
spanString.setSpan(clickableSpan,16,36,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
skText.text=spanString
skText.movementMethod=LinkMovementMethod.getInstance()
}
}
解决方法
对于 kotlin 合成导入,您应该像这样导入布局
import kotlinx.android.synthetic.main.daftar.*
给你打电话
setContentView(R.layout.daftar)
删除其他合成导入。
,你必须先初始化 back_button
,然后才能附加任何东西
back_button = findViewById(R.id.back_button);
back_button.setOnClickListener{ ... rest of code
您必须通过代码进一步获得对每个 View
的引用,button_login_sekarang
和 buatAkun
也是如此
还要确保所有这些 View
都放在集合布局 (R.layout.daftar
) 内
您的进口:
import kotlinx.android.synthetic.main.action_bar.*
import kotlinx.android.synthetic.main.daftar.*
import kotlinx.android.synthetic.main.masuk.*
当您导入多个 synthetics
并获得空指针异常时,您的项目中似乎有多个 ID 为 back_button
的视图。当您将此活动设置为 main.daftar
时,您应该只在此活动中调用来自 R.layout.daftar
的视图。
P.s:如果你想避免synthetic
的这种缺点,你可以用view binding代替{{3}},建议使用它代替kotlin synthetic
检查寄存器 .xml
的 Activity
文件并在 build.gradle
文件中添加 Kotlin 扩展。
如果它不起作用然后添加
android:onClick="backButton"
到按钮的 xml
并创建一个 fun
:
fun backButton(){
}
并在其中写入 setonClicklistener
代码。
我们今天的关于java – 复选框中的OnclickListener(Android Studio)和java复选框事件处理的分享就到这里,谢谢您的阅读,如果想了解更多关于Android EditText OnClickListener问题、Android ListView的OnItemClickListener详解、Android setOnItemClickListener vs setOnClickListener、Android Studio 中的 setOnClickListener 错误的相关信息,可以在本站进行搜索。
本文标签: