2017-02-20 2 views
1

Wenn ich versuche, meinem EditText einen TextChangedListener hinzuzufügen, stürzt die App ab, auch wenn ich nichts in AfterTextChangedMethod schreibe. Ich versuche, die Zeichenfolge vom Benutzer eingefügt, aber sobald ich meinen Listener hinzufügen, stürzt es ab. dieseEditText stürzt App ab, wenn ich versuche, Listener hinzuzufügen

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

Beitrag logcat Ausgabe –

+0

Beitrag Logcat als @RahulGiradkar vorgeschlagen außer Kraft setzen. Bitte posten Sie auch Ihren .xml-Code - ich habe das Gefühl, dass es einige ClassCastExceptions geben könnte. – rencsaridogan

+1

Verwenden Sie 'getView()' anstelle von 'getActivity()' – Piyush

Antwort

0

Versuchen,

@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

Noch wird es abgestürzt sein. Weil Sie nicht geändert haben Ids für _TextView_ – Piyush

+0

@Smaragd geändert ID für Textansicht auch – user2025187

+0

Dies wird wahrscheinlich Ihr Problem lösen. Ihr Code versucht, auf den Inhalt der Hauptinhaltsansicht zuzugreifen, bevor Sie ihn erstellt haben. Die aufgeblasene Linie dort erstellt die Ansicht von Ihrem 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

Du Aufblasen nicht Ihre Ansicht in zunächst onCreateViewMethod. Erweitern Sie zuerst Ihre Ansicht und dann Unteransichten.

0

Ihre Anwendung abstürzt, weil Sie einen Zuhörer auf einen Null-Referenzobjekt hinzufügen möchten. Überprüfen Sie die ID, die Sie Ihrem Editext zuweisen. Außerdem versuchen Sie den folgenden Code.

Gerade zurückkehren dies in Ihrer onCreateView Methode.

Überschreiben Sie die onViewCreated-Methode, verwenden Sie die eingehende View-Variable, um Ihren EditText zu initialisieren.

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

}

Dann fügen Sie textChangeListener zu.

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

Hoffe es hilft.

0

Try this ...

Ich glaube, Sie LayoutInflater für Ihre Ansicht verwenden möchten.

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); 

Dann können Sie TextChangedMethod Methode

Verwandte Themen