[英]EditText crashes app when I try to add listener
當我嘗試將TextChangedListener添加到我的EditText時,應用程序崩潰,即使我沒有在AfterTextChangedMethod中寫任何內容。 我正在嘗試讓用戶插入字符串,但是一旦我添加了我的監聽器,它就會崩潰。
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);
}
嘗試這個,
@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;
}
您不是首先在onCreateViewMethod中誇大您的視圖。 首先膨脹您的視圖,然后查找子視圖。
您的應用程序崩潰了,因為您正在嘗試將偵聽器添加到空引用對象。 仔細檢查您分配給您的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
}
});
希望能幫助到你。
嘗試這個...
我想你想在你的視圖中使用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方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.