java - 在 RecyclerView 关注之前的 EditText

标签 java android user-interface

我在 RecyclerView 中有一些垂直的 EditText

当我在下半个垂直屏幕上触摸 EditText 时。将光标移到上一个 EditText 上并关注它。

我对此进行了搜索,但找不到任何解决方案。

请帮忙..

编辑:

我正在点击位于回收站 View 位置 10 的编辑文本。

但 android 专注于编辑位置 9 的文本

编辑 2: 我的适配器类:

public class inputsAdapter extends RecyclerView.Adapter<holder> implements View.OnFocusChangeListener {
    public List<String> paramList,resultList;
    Context mContext;
    boolean doneParam,doneResult;
    public View focusedView;
    public ArrayAdapter<String> adapter ;
    public inputsAdapter(List<String> paramList, List<String> resultList, Context mContext) {
        this.paramList = paramList;
        this.resultList = resultList;
        this.mContext = mContext;
        this.doneParam=false;
        this.doneResult=false;
        this.focusedView=null;
        this.adapter = new ArrayAdapter<String>
                (mContext,android.R.layout.simple_list_item_1,mContext.getResources().getStringArray(R.array.correct_params) );
    }

    @Override
    public holder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.parameter_row,parent,false);
        return new holder(view);
    }

    @Override
    public void onBindViewHolder(holder holder, final int position) {
        if(position<paramList.size()){
            holder.paramConst.setVisibility(View.VISIBLE);
            holder.paramConst.setTag(position);
            holder.paramEt.setAdapter(adapter);
            holder.paramEt.setText(paramList.get(position));
            holder.addParam.setVisibility(View.GONE);
            doneParam=false;
            holder.paramEt.setOnFocusChangeListener(this);
        }else if(position==paramList.size()){
            holder.paramConst.setVisibility(View.INVISIBLE);
            holder.addParam.setBackground(mContext.getResources().getDrawable(R.drawable.ic_add_box_black_24dp));
            holder.addParam.setVisibility(View.VISIBLE);
        }else{
            holder.paramConst.setVisibility(View.INVISIBLE);
            holder.addParam.setVisibility(View.GONE);
        }

        if(position<resultList.size()){
            holder.resultConst.setVisibility(View.VISIBLE);
            holder.resultConst.setTag(position);
            holder.resultEt.setText(resultList.get(position));
            holder.addResult.setVisibility(View.GONE);
            doneResult=false;

        }else if(position==resultList.size()){
            holder.resultConst.setVisibility(View.INVISIBLE);
            holder.addResult.setBackground(mContext.getResources().getDrawable(R.drawable.ic_add_box_black_24dp));
            holder.addResult.setVisibility(View.VISIBLE);
        }else{
            holder.resultConst.setVisibility(View.INVISIBLE);
            holder.addResult.setVisibility(View.GONE);
        }


    }

    @Override
    public int getItemCount() {
        if(paramList.size()>resultList.size())
            {return paramList.size()+1;}
        else {return resultList.size()+1; }
    }


    @Override
    public void onFocusChange(View view, boolean b) {
        if(b){
            this.focusedView=view;

        }else{
            ConstraintLayout constraintLayout= (ConstraintLayout) view.getParent();
            int index= (int) constraintLayout.getTag();
            EditText et= (EditText) view;
            paramList.set(index,et.getText().toString());
        }
    }
}
class holder extends RecyclerView.ViewHolder {
    AutoCompleteTextView paramEt,resultEt;
    Button addParam,addResult;
    ConstraintLayout paramConst,resultConst;
    public holder(View itemView) {
        super(itemView);
        paramEt=itemView.findViewById(R.id.paramEt);
        resultEt=itemView.findViewById(R.id.resultEt);
        paramConst=itemView.findViewById(R.id.paramConstraint);
        resultConst=itemView.findViewById(R.id.resultConstraint);
        addParam=itemView.findViewById(R.id.paramAddAfterBtn);
        addResult=itemView.findViewById(R.id.resultAddAfterBtn);
    }
}

最佳答案

您的 getItemCount 方法返回了错误的值。您不需要为其添加 +1。因此,将您的方法更改为以下代码,看看它是否解决了您的问题:

@Override
public int getItemCount() {
    if(paramList.size()>resultList.size())
        {return paramList.size();}
    else {return resultList.size(); }
}

关于java - 在 RecyclerView 关注之前的 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165744/

相关文章:

eclipse - Eclipse JDK 警告的 Maven 集成

java - NetBeans 中重构/选择/编辑器选项的键盘快捷方式?

android - 如何从异步任务中获取对当前窗口的引用?安卓

user-interface - 具有类似外观 UI 的 Cappuccino 替代品?

html - 如何修复 "name property of a focusable element must not be null"

java - 用 Java 将多个图像上传到面板上

java - Vaadin 和 Spring,通过 LDAP 针对 Active Directory 进行身份验证

android - 如果 edittext 有图像如何从 edittext 中获取所有图像?

android - kotlin-无法替换 RecyclerView 适配器中的 Fragment

android - 无法在 Debug模式下运行