Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 临时禁用编辑文本_Android_Focus_Android Edittext_Focusable - Fatal编程技术网

Android 临时禁用编辑文本

Android 临时禁用编辑文本,android,focus,android-edittext,focusable,Android,Focus,Android Edittext,Focusable,我想EditText暂时不获取foucs 场景是:我有两个文本。无论何时更改任何EditText的文本,我希望另一个EditText在另一个预定义事件发生之前不响应用户单击 为了实现这一目标,我尝试了以下方法: @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume"); registerBroadcastReceivers(); } // Register Broadca

我想
EditText
暂时不获取foucs

场景是:我有两个文本。无论何时更改任何EditText的文本,我希望另一个EditText在另一个预定义事件发生之前不响应用户单击

为了实现这一目标,我尝试了以下方法:

@Override
protected void onResume() {
    super.onResume();
    Log.d(TAG, "onResume");
    registerBroadcastReceivers();
}

// Register BroadcastReceivers
private void registerBroadcastReceivers() {
    Log.d(TAG, "Registering broadcast receivers.");

    // Google response receiver
    googleResponseReceiver = new GoogleAPIResponseReceiver();
    IntentFilter googleResponseIntentFilter = new IntentFilter(
            RS_GoogleApiIntentService.ACTION_RECEIVED_GOOGLE_RESPONSE);
    googleResponseIntentFilter.addCategory(Intent.CATEGORY_DEFAULT);
    LocalBroadcastManager.getInstance(this).registerReceiver(
            googleResponseReceiver, googleResponseIntentFilter);
}

editText1.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before,
                int count) {
        // Set EditText non-focusable
        MyActivity.this.editText2.setFocusableInTouchMode(false);
    }
});

.
.
. 
// Somewhere in one function I call below function to start an IntentService.
.
.
. 

// Call Google API with given URL
private void CallGoogleApiWithUrl(String url, int requestId) {

    Intent intent = new Intent(this, RS_GoogleApiIntentService.class);
    intent.putExtra(RS_GoogleApiIntentService.EXTRA_URL_STRING, url);
    intent.putExtra(RS_GoogleApiIntentService.EXTRA_GOOGLE_API_REQUEST_ID,
            requestId);
    startService(intent);
}

// Broadcast receiver for Google API response
public class GoogleAPIResponseReceiver extends BroadcastReceiver {

    // Enabling EditText works up to this point.

    @Override
    public void onReceive(Context context, Intent intent) {

        // Stops working now onwards.

    }
}

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

        // Set EditText focusable
        MyActivity.this.editText2.setFocusableInTouchMode(true);
}
@覆盖
受保护的void onResume(){
super.onResume();
Log.d(标签“onResume”);
注册受托人();
}
//注册广播接收机
私人无效登记处{
Log.d(标签“注册广播接收器”);
//谷歌响应接收器
googleResponseReceiver=新的GooglePiResponseReceiver();
IntentFilter googleResponseIntentFilter=新IntentFilter(
RS_GoogleApiIntentService.ACTION_收到GOOGLE_回复);
googleResponseIntentFilter.addCategory(Intent.CATEGORY\u默认值);
LocalBroadcastManager.getInstance(this.registerReceiver)(
googleResponseReceiver,googleResponseIntentFilter);
}
editText1.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,
整数计数){
//将EditText设置为不可聚焦
MyActivity.this.editText2.setFocusableInTouchMode(false);
}
});
.
.
. 
//在一个函数的某个地方,我调用下面的函数来启动IntentService。
.
.
. 
//使用给定的URL调用GoogleAPI
私有void CallGoogleApiWithUrl(字符串url,int requestId){
意向意向=新意向(this,RS_GoogleApiIntentService.class);
intent.putExtra(RS_GoogleApiIntentService.EXTRA_URL_字符串,URL);
intent.putExtra(RS_GoogleApiIntentService.EXTRA_GOOGLE_API_REQUEST_ID,
请求ID);
startService(意向);
}
//用于googleapi响应的广播接收器
公共类GoogleApirResponseReceiver扩展了BroadcastReceiver{
//到目前为止,启用EditText仍然有效。
@凌驾
公共void onReceive(上下文、意图){
//从现在开始停止工作。
}
}
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//将编辑文本设置为可聚焦
MyActivity.this.editText2.setFocusableInTouchMode(true);
}
布局:


EditText再也无法获得焦点。禁用焦点有效,但再次启用则无效。我还尝试了使用
editText2.setEnabled();
方法。它也不起作用。

试试这个

editText2.clearFocus();

设置
editText2.requestFocus();
当您想要聚焦于
EditText
将其写入活动的清单文件时,它会在第一时间通过创建活动散焦EditText。然后通过触摸编辑文本重新获得焦点

android:windowSoftInputMode="adjustPan|stateHidden"

这真的很简单,我的朋友。 您可以尝试以下方法:

   editText1.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before,
                int count) {
        // Set EditText non-focusable
        editText2.setEnable(false);
        editText2.setClickable(false);


    }
});

.
.  // some work
.

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

        // Set EditText focusable
                editText2.setEnable(true);
        editText2.setClickable(true);
}
editText1.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,
整数计数){
//将EditText设置为不可聚焦
editText2.setEnable(false);
editText2.可点击设置(假);
}
});
.
.//一些工作
.
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//将编辑文本设置为可聚焦
editText2.setEnable(真);
editText2.可设置可点击(真);
}
只要像上面那样更新你的代码,然后再试一次。那肯定会有用的。如果不行,请告诉我,我会帮助你的


喜欢编码…:)

您可以使用以下代码并通过java进行相应的操作

`<EditText ...
    android:clickable="false" 
    android:cursorVisible="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false">
 </EditText>'
`
'

请显示editText1和editText2的声明…您不希望焦点或edittext可见,只需指出在
setFocusableInTouchMode(false)
之后调用
setFocusable(false)
是多余的。另外,
setFocusable(true)如果您正在调用
setFocusableInTouchMode(true),则不需要使用
。你能做focusable false onEditTextChanged吗?如果是这样的话,我想你可以使用处理程序和onPostDelayed方法尝试focusable true,延迟2000毫秒。我在一些类似的情况下使用过这个方法,它会使第一个可聚焦对象获得焦点。这不是我的要求。我希望EditText只在用户触摸时获得焦点。我还是这样做的我不想仅仅为了这个目的而添加onClickListener。一旦我设置为false,它就会给出false。我尝试过。问题是,一旦我禁用它,它就不会再被启用。那么,也许在您的cod中的其他地方出现了问题,您是否希望向我们展示更多的问题,比如XML文件?@felixd添加了XML文件。问题是,如果我在一些me中添加了启用EditText的代码方法是可行的。为了清楚起见,首先我禁用了EditText,然后调用IntentService并将结果返回给activity。为了收听IntentService的结果,我在活动中有广播接收器。因此,如果我在广播接收器的
onReceive
中或在应用程序流中的广播接收器之后的任何其他方法中放置启用EditText的代码,这不起作用。@Akash听起来像是一个错误的布线问题或是一个从未到达的代码块…请添加您的整个代码块,包括意图请求和广播接收器,因为您的问题似乎就在那里。这并没有提供问题的答案。若要评论或请求作者澄清,请留下在他们的帖子下方发表评论-你可以随时对自己的帖子发表评论,一旦你有足够的评论,你就可以发表评论了。
Timer timer = new Timer();
timer.schedule(new TimerTask() {

  @Override
  public void run() {
    editText2.setEnable(false);
    editText2.setClickable(false);
  }
}, 20);
`<EditText ...
    android:clickable="false" 
    android:cursorVisible="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false">
 </EditText>'