简体   繁体   English

当我尝试添加监听器时,EditText会崩溃应用程序

[英]EditText crashes app when I try to add listener

When I try to add a TextChangedListener to my EditText the app crashes, even if I don't write anything inside the AfterTextChangedMethod. 当我尝试将TextChangedListener添加到我的EditText时,应用程序崩溃,即使我没有在AfterTextChangedMethod中写任何内容。 I'm trying to get the string inserted by the user, but as soon as I add my listener it crashes. 我正在尝试让用户插入字符串,但是一旦我添加了我的监听器,它就会崩溃。

public class MainActivityFragment extends Fragment {

    ArrayList<HashMap<String,String>> city_list;

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        EditText search = (EditText) getActivity().findViewById(R.id.search_view);
        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {    }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {     }

            @Override
            public void afterTextChanged(Editable s) {
                String inserted = s.toString();
                for(int i=0; i< city_list.size();i++){
                    if(city_list.get(i).toString().equalsIgnoreCase(inserted)){
                        TextView id = (TextView) getActivity().findViewById(R.id.city_id);
                        id.setText(city_list.get(i).get("_id").toString());
                        TextView lat = (TextView) getActivity().findViewById(R.id.city_lat);
                        lat.setText(city_list.get(i).get("lat").toString());
                        TextView lon = (TextView) getActivity().findViewById(R.id.city_long);
                        lon.setText(city_list.get(i).get("lon").toString());
                    }
                }
            }
        });

        return inflater.inflate(R.layout.fragment_main, container, false);
    }

Try this, 尝试这个,

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_main, container, false);

        EditText search = (EditText)view.findViewById(R.id.search_view);
        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String inserted = s.toString();
                for(int i=0; i< city_list.size();i++){
                    if(city_list.get(i).toString().equalsIgnoreCase(inserted)){
                        TextView id = (TextView) view .findViewById(R.id.city_id);
                        id.setText(city_list.get(i).get("_id").toString());
                        TextView lat = (TextView) view .findViewById(R.id.city_lat);
                        lat.setText(city_list.get(i).get("lat").toString());
                        TextView lon = (TextView) view .findViewById(R.id.city_long);
                        lon.setText(city_list.get(i).get("lon").toString());
                    }
                }
            }
        });


        return view;
    }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_main, container, false);

    EditText search = (EditText)view.findViewById(R.id.search_view);
    search.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            String inserted = s.toString();
            for(int i=0; i< city_list.size();i++){
                if(city_list.get(i).toString().equalsIgnoreCase(inserted)){
                    TextView id = (TextView) view .findViewById(R.id.city_id);
                    id.setText(city_list.get(i).get("_id").toString());
                    TextView lat = (TextView) view .findViewById(R.id.city_lat);
                    lat.setText(city_list.get(i).get("lat").toString());
                    TextView lon = (TextView) getActivity()view .findViewById(R.id.city_long);
                    lon.setText(city_list.get(i).get("lon").toString());
                }
            }
        }
    });


    return view;
}
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
View view=    inflater.inflate(R.layout.fragment_main, container, false);
        EditText search = (EditText) view.findViewById(R.id.search_view);
  TextView id = (TextView) view.findViewById(R.id.city_id);
  TextView lat = (TextView) view.findViewById(R.id.city_lat);
  TextView lon = (TextView) view.findViewById(R.id.city_long);
        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String inserted = s.toString();
                for(int i=0; i< city_list.size();i++){
                    if(city_list.get(i).toString().equalsIgnoreCase(inserted)){

                      id.setText(city_list.get(i).get("_id").toString());

                       lat.setText(city_list.get(i).get("lat").toString());

                     lon.setText(city_list.get(i).get("lon").toString());
                    }
                }
            }
        });


        return view;
    }

You are not inflating your view in you onCreateViewMethod first. 您不是首先在onCreateViewMethod中夸大您的视图。 First Inflate your view and then find sub views. 首先膨胀您的视图,然后查找子视图。

Your app is crashing because you are trying to add a listener to a null reference object. 您的应用程序崩溃了,因为您正在尝试将侦听器添加到空引用对象。 Double check the ID you are assigning to your editext. 仔细检查您分配给您的editext的ID。 Moreover try the below code. 此外,尝试以下代码。

Just return this in your onCreateView Method. 只需在onCreateView方法中返回此内容即可。

return inflater.inflate(R.layout.fragment_main, container, false);

Override onViewCreated method, use the incoming View variable to initialize your EditText. 覆盖onViewCreated方法,使用传入的View变量初始化EditText。

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    EditText etSearch = (EditText) view.findViewById(R.id.search_view);

} }

Then add textChangeListener to it. 然后将textChangeListener添加到它。

   etSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
           //your code here
        }
    });

Hope it helps. 希望能帮助到你。

Try this... 尝试这个...

I think you want to use LayoutInflater for your view. 我想你想在你的视图中使用LayoutInflater。

LayoutInflater inflater1 = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.fragment_main, container, false);
EditText search = (EditText)view.findViewById(R.id.search_view);

Then you can override TextChangedMethod method 然后,您可以覆盖TextChangedMethod方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM