0
사용자 지정 어댑터를 검색 할 수있는 목록보기를 만드는 방법이 궁금했습니다. 튜토리얼을 따라 모든 설정을했는데 EditText에 아무 것도 입력하지 않으면 응용 프로그램이 다운됩니다. 이제 앱이 왜 충돌하는지 알지만, 해결 방법을 모르겠습니다. 여기 사용자 지정 목록보기 검색
내 MainActivity에 코드입니다 :@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context ctx = getApplication();
Resources res = ctx.getResources();
String[] options = res.getStringArray(R.array.item_ids);
String[] ids = res.getStringArray(R.array.item_names);
TypedArray icons = res.obtainTypedArray(R.array.item_images);
setListAdapter(new ItemIDAdapter(ctx, R.layout.idslistitem, ids, options, icons));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Get the options menu view from menu.xml in menu folder
getSupportMenuInflater().inflate(R.menu.items_menu, menu);
// Locate the EditText in menu.xml
editsearch = (EditText) menu.findItem(R.id.menu_search).getActionView();
// Capture Text in EditText
editsearch.addTextChangedListener(textWatcher);
// Show the search menu item in menu.xml
MenuItem menuSearch = menu.findItem(R.id.menu_search);
menuSearch.setOnActionExpandListener(new OnActionExpandListener() {
// Menu Action Collapse
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Empty EditText to remove text filtering
editsearch.setText("");
editsearch.clearFocus();
return true;
}
// Menu Action Expand
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Focus on EditText
editsearch.requestFocus();
// Force the keyboard to show on EditText focus
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
return true;
}
});
// Show the settings menu item in menu.xml
MenuItem menuSettings = menu.findItem(R.id.home);
// Capture menu item clicks
menuSettings.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent intent2 = new Intent(ItemId.this, Home.class);
startActivity(intent2);
return true;
}
});
return true;
}
// EditText TextWatcher
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
String text = editsearch.getText().toString()
.toLowerCase(Locale.getDefault());
adapter.getFilter().filter(text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
};
그리고 여기 내 사용자 지정 목록보기 어댑터에 코드입니다 :
public class ItemIDAdapter extends ArrayAdapter<String> {
public LayoutInflater mInflater;
public String[] mStrings;
public String[] mIds;
public TypedArray mIcons;
public int mViewResourceId;
ArrayAdapter<String> adapter;
public ItemIDAdapter(Context ctx, int viewResourceId,
String[] strings, String[] ids, TypedArray icons) {
super(ctx, viewResourceId, strings);
mInflater = (LayoutInflater)ctx.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
mStrings = strings;
mIds = ids;
mIcons = icons;
mViewResourceId = viewResourceId;
}
@Override
public int getCount() {
return mStrings.length;
}
@Override
public String getItem(int position) {
return mStrings[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(mViewResourceId, null);
ImageView iv = (ImageView)convertView.findViewById(R.id.option_icon);
iv.setImageDrawable(mIcons.getDrawable(position));
TextView tv = (TextView)convertView.findViewById(R.id.option_text);
tv.setText(mStrings[position]);
TextView tv1 = (TextView)convertView.findViewById(R.id.itemids);
tv1.setText(mIds[position]);
return convertView;
}
}
응용 프로그램이 충돌 내가 검색하려고하는 이유 때문입니다 TextWatcher에서이 줄은 : adapter.getFilter().filter(text);
어댑터는 내 주요 활동의 맨 위에 정의되어 있지만 ALL의 내 listview에서는 사용되지 않습니다. 여기에 붙어있어 실제로 adapter
을 대체 할 항목을 알 수 없습니다. ItemIDAdapter가 작동하지 않기 때문입니다. 당신의 도움을 주셔서 감사합니다!
와
이이 충돌을 고정 교체! 정말 고마워! 그러나 편집 텍스트에 내용을 입력하고 키보드에서 "완료"를 클릭해도 아무런 변화가 없습니다. 왜 그런가? – user1798956
@ user1798956 : 디버깅을 시도한 이유를 알아 냈습니까? – ChiefTwoPencils
나는 시도했지만, 똑같은 것을 반복해서 반복해서 쓰고 있는데,'I/endeffect (5461) : AbsListView.onMeasure(), getWidth() = 1080, getHeight() = 914, this = android.widget.ListView {424f6b80 VFED.VC. # 102000a android : id/list} 08-19 20 : 24 : 04.844 : AbsListView.onMeasure(), getWidth() = 1080, getHeight() = 914, this = android.widget.ListView {424f6b80 VFED.VC. ......나는. 0,0-1080,914 # 102000a android : id/list} ' – user1798956