小白最近在写一个安卓开发的项目,但是遇到一个很奇怪的问题,(尽管知道ListView遇到editview会有很多问题,但是一直不知道为什么)
ListView遇到多个editview的时候,OnFocusChangeListener无法正常使用,触发一次这个方法,就会出现,先得到焦点,失去焦点,又得到焦点的循环几次的问题,(单独使用的时候一点问题都没有,添加到listview里面,就是会这样连续几次,但是出现几次以后就会停止,求大神支招,已经折磨我不知道多少天了.
项目地址:https://github.com/liust15/Question
看图(图不清晰,不好意思啊,我就点击的一次,后面循环出现下面的Toast为提示地方)上代码
//适配器主要代码,就是在这里添加了适配器焦点事件
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;
    }
}
主视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">
        <ListView
            android:id="@+id/main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="beforeDescendants"></ListView>    </LinearLayout>
</LinearLayout>listview视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:gravity="center"
    android:orientation="horizontal">    <EditText
        android:id="@+id/list_a"
        android:layout_width="120dp"
        android:layout_height="80dp"
        android:layout_margin="5dp"
        android:gravity="center"
        android:maxEms="16"
        android:shadowColor="#465d45"
        android:textColor="#000" />    <EditText
        android:id="@+id/list_b"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_margin="5dp"
        android:gravity="center"
        android:maxEms="4"
        android:numeric="integer"
        android:textColor="#000" />    <EditText
        android:id="@+id/list_c"
        android:layout_width="120dp"
        android:layout_height="80dp"
        android:layout_margin="5dp"
        android:editable="false"
        android:gravity="center"
        android:maxEms="16"
        android:textColor="#000" /></LinearLayout>
项目地址:https://github.com/liust15/Question