相关疑难解决方法(0)

如何删除添加了addTextChangedListener的所有侦听器

我有一个ListView每行有EditText控件的地方.我想在TextChangedListener每一行添加一个; 一个包含额外数据的数据,它说明了哪一行EditText.问题是,当getView被调用时,TextWatchers会添加多个; 因为convertView已经有一个TextWatcher(和一个指向不同的行).

MyTextWatcher watcher = new MyTextWatcher(currentQuestion);
EditText text = (EditText)convertView.findViewById(R.id.responseText);
text.addTextChangedListener(watcher);
Run Code Online (Sandbox Code Playgroud)

MyTextWatcher是我的班级实施TextWatcher; 并处理文本事件.CurrentQuestion让我知道我正在采取哪一行.当我输入框中; TextWatcher调用多个实例.

有没有办法TextWatchers在添加新的之前删除它?我看到了removeTextChangedListener方法,但这需要TextWatcher传入一个特定的,我不知道如何获得指针TextWatcher已经存在的指针.

android listview textwatcher android-edittext

52
推荐指数
6
解决办法
4万
查看次数

TextWatcher事件被多次触发

我对TextWatcher有一个恼人的问题.我一直在网上搜索,但找不到任何东西.感谢有人能帮助我.

出于某种原因,在一次文本更改时对TextWatcher事件的调用是不稳定的.有时它们会被触发一次(就像它们应该的那样),有时是两次,有时是3次.不知道为什么,整件事情非常直截了当.有时候,afterTextChanged()上的Editable参数会返回toString()和length()中的空值.

代码如下:

    private TextWatcher mSearchAddressTextChangeListener = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) { }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

        @Override
        public void afterTextChanged(Editable searchedAddress) {
           System.out.println("called multiple times.");   
        }
    };
Run Code Online (Sandbox Code Playgroud)

内部afterTextChanged()(和AsyncTask)我没有对文本或EditText视图进行任何更改.

我看到在TextWatcher的事件中询问的问题被调用了两次,但我发现事件触发的次数多于(或少于)两次.

无论如何,感谢任何帮助.

编辑:我删除了afterTextChanged()的内容导致即使没有我的代码也会发生此问题.是什么让我相信这是一个错误.当在常规字符(事件处理程序被触发两次)之后输入'space'字符时或者在删除常规字符之后的'space'字符(退格.事件处理程序被触发3次)时,会发生错误.帮助仍将受到赞赏.

android android-layout textwatcher

40
推荐指数
4
解决办法
2万
查看次数

使用Android构建动态表单的解决方案

我实际上正在开发一个Android应用程序,我应该根据JSON文档中包含的元数据显示动态表单.基本上它的工作方式(没有细节)是JSON文档代表一个表单的结构:

{
    "fields": [
        {
            "name": "fieldA",
            "type": "STRING",
            "minCharacters": 10,
            "maxCharacters": 100
        },
        {
            "name": "fieldB",
            "type": "INTEGER",
            "min": 10,
            "max": 100
        },
        {
            "name": "fieldC",
            "type": "BOOLEAN_CHECKBOX",
            "defaultValue": true
        }
        ...
    ],
    "name": "Form A"
}
Run Code Online (Sandbox Code Playgroud)

当应用程序收到其中一个JSON文档时,我实际上正在做的是它遍历每个字段并将其解析到适当的视图(EditText,Checkbox,自定义视图等),向视图添加标记(将是能够轻松检索它并将视图添加到LinearLayout.这是一个伪代码,它实际上是如何工作的:

//Add form title
linearLayout.addView(new TextView(form.name));
//Add form fields
for(Field field: form.fields) {
    View view;
    switch(field.type){
        case STRING: view = new EditText();
        ...
    }
    view.setTag(field.id);
    linearLayout.addView(view);
}
Run Code Online (Sandbox Code Playgroud)

这个问题是,对于大型表单(如> 20个字段),它需要充斥大量视图,并且UI线程会受到很大影响.另一点需要考虑的是,单个屏幕可能有多种形式(一个接一个地垂直排序).

为了避免重载UI线程我想到了2个可能的解决方案:

  1. 使用RecyclerView.
  2. 通过Facebook使用Litho.

但在考虑这两个解决方案时,我会遇到多个问题:

  1. 使用Litho是一个很好的用例吗?或者使用RecyclerView就足够了?
  2. 我的观点如何?如果我使用回收模式,我是否能够保持每个字段的状态(甚至是屏幕外的那些字段),从而能够在不丢失数据的情况下保存表单?
  3. 如果我使用回收模式显示一个表单,我将如何处理多个表单?我们可以嵌套RecyclerView吗?表格需要像在垂直房车内一个接一个地显示,但如果表格本身是房车,我应该如何处理? …

forms android android-recyclerview litho

9
推荐指数
1
解决办法
8064
查看次数

保存输入到 RecyclerView 的 EditTexts 中的值

我有一个RecyclerView,其中每行也有一个EditText,允许用户输入一个值。

但是,当用户旋转屏幕时,这些值会重置为其默认的空白值。

所以我想保存的值List或者Map这样我就可以补充上恢复列表。

但是我不知道如何“迭代当前列表”并获取EditTexts并提取值。

android android-edittext android-recyclerview

4
推荐指数
1
解决办法
8843
查看次数

从RecycleView中添加项目重点关注EditText

我有一个应用程序,我用RecycleViewCardViews.该CardView含有EditText当我添加一个新的,现在CardViewRecycleViewEditText应该有重点,键盘应该会出现.

我怎样才能做到这一点?我试图在以下内容中添加一些代码onBindViewHolder:

public void onBindViewHolder(TodoViewHolder holder, final int position) {
    ...
    if(holder.tvDescription.requestFocus()) {
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者虽然创造ViewHolder但它没有奏效.

public class TodoViewHolder extends RecyclerView.ViewHolder {
    protected CheckBox cbDone;
    protected EditText tvDescription;
    protected FloatingActionButton btnDelete;

    public TodoViewHolder(View itemView) {
        super(itemView);

        cbDone = (CheckBox)itemView.findViewById(R.id.cbDone);
        tvDescription = (EditText) itemView.findViewById(R.id.tvDescription);
        btnDelete = (FloatingActionButton) itemView.findViewById(R.id.btnDelete);

        if(tvDescription.requestFocus()) {
            window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我AdapterCode的解决方案:

public abstract class ArrayAdapter<T, …
Run Code Online (Sandbox Code Playgroud)

android focus android-edittext android-recyclerview

4
推荐指数
1
解决办法
4726
查看次数

Android RecyclerView -Multiple Edittext同时更改

我有一张RecyclerView有很多牌可容纳4张的牌EditText.当我在一张EditText卡中的一张卡中输入值时,它会在随机卡中填充相同的值.令人惊讶的是它没有跳过EditText例如:

如果我输入值edittext1card1它将填补相同的值到edittext1card8,如果我改变的值card8会更改值回card1.有人可以告诉我为什么会这样.

先感谢您

这是我的代码:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {    
private String[] mDataset;
public String[][] data = new String[30][4];


public static class ViewHolder extends RecyclerView.ViewHolder {
     // each data item is just a string in this case
     public LinearLayout mCardView;

     public ViewHolder(LinearLayout v) {
        super(v);
        mCardView = v;
    }
}

// Provide a suitable constructor (depends on the kind of …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-recyclerview

2
推荐指数
1
解决办法
4052
查看次数