ListView遇到多个editview的棘手的焦点获取问题?

新手上路,请多包涵

小白最近在写一个安卓开发的项目,但是遇到一个很奇怪的问题,(尽管知道ListView遇到editview会有很多问题,但是一直不知道为什么)

ListView遇到多个editview的时候,OnFocusChangeListener无法正常使用,触发一次这个方法,就会出现,先得到焦点,失去焦点,又得到焦点的循环几次的问题,(单独使用的时候一点问题都没有,添加到listview里面,就是会这样连续几次,但是出现几次以后就会停止.

完整项目地址:https://github.com/liust15/Qu...

求大神支招,已经折磨我不知道多少天了.
看图(图不清晰,不好意思啊,我就点击的一次,后面循环出现下面的Toast为提示地方)

clipboard.png


适配器主要代码,就是在这里添加了适配器焦点事件

class ListViewAdapter extends BaseAdapter {
    private int resourceid;
    private Context context;
    List<ListviewBean> data; 
    @Override
    public View getView(int position, View view, ViewGroup parent) {
        ListviewBean listviewBean = (ListviewBean) getItem(position);
        Packages packages = null;
        if (null == view) {
            packages = new Packages();
            //获得组件,实例化组件
            view = LayoutInflater.from(context).inflate(resourceid, parent, false);
            packages.list_a = (EditText) view.findViewById(R.id.list_a);
            packages.list_b = (EditText) view.findViewById(R.id.list_b);
            packages.list_c = (EditText) view.findViewById(R.id.list_c);
            view.setTag(packages);
        } else {
            packages = (Packages) view.getTag();
        }
        isEmpty(listviewBean.getA(), packages.list_a);
        isEmpty(listviewBean.getB(), packages.list_b);
        isEmpty(listviewBean.getC(), packages.list_c);
//添加了焦点事件
        packages.list_b.setOnFocusChangeListener(new OncFocusChangeListener());
        return view;
    }
 
    public void isEmpty(String string, EditText editText) {
        if (!TextUtils.isEmpty(string)) {
            editText.setText(string);
        } else {
            editText.setText("");
        }
    }
 
    //绑定焦点事件
    class OncFocusChangeListener implements View.OnFocusChangeListener {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                Toast.makeText(context, "失去焦点", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, "获得焦点", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

MainActivity类主要代码

public class MainActivity extends AppCompatActivity {
    private ListViewAdapter listViewAdapter;
    List<ListviewBean> list;
    private ListView listView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.main);
        list = getList();
        listViewAdapter = new ListViewAdapter(this, R.layout.listview, list);
        listView.setAdapter(listViewAdapter);
    }
//获取初始参数
    public List<ListviewBean> getList() {
        List<ListviewBean> list = new ArrayList<>();
        ListviewBean listviewBean = new ListviewBean("1", "1", "1");
        list.add(listviewBean);
        return list;
    }
}

完整项目地址:https://github.com/liust15/Qu...

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏