2017-02-20 100 views
1

当我尝试向我的EditText添加TextChangedListener时,应用程序崩溃,即使我没有在AfterTextChangedMethod中写入任何内容。我试图让用户插入的字符串,但只要我添加我的侦听器它崩溃。当我尝试添加侦听器时,EditText崩溃了应用程序

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); 
    } 
+0

后logcat的输出 –

+0

后的logcat为@RahulGiradkar建议。另外,请张贴您的.xml代码 - 我有一种感觉可能会出现一些ClassCastExceptions。 – rencsaridogan

+1

使用'getView()'而不是'getActivity()' – Piyush

回答

0

试试这个,

@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; 
    } 
+0

它仍然会崩溃。因为你还没有改变_dsxtview_ – Piyush

+0

@dsmerald改变id为文本视图 – user2025187

+0

这可能会解决你的问题。您的代码在创建之前会尝试访问主内容视图的内容。膨胀行在那里创建你的XML视图。 – James

0
@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; 
} 
0
@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; 
    } 
0

你是不是夸大你的观点在你onCreateViewMethod第一。先膨胀你的视图,然后找到子视图。

0

您的应用程序正在崩溃,因为您试图将侦听器添加到空引用对象。仔细检查您分配给您的editext的ID。此外尝试下面的代码。

只需在onCreateView方法中返回此值即可。

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

重写onViewCreated方法,使用传入的View变量初始化您的EditText。

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

}

然后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 
     } 
    }); 

希望它有帮助。

0

试试这个...

我认为你想为你的视图使用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); 

然后你就可以覆盖TextChangedMethod方法

相关问题