我遇到以下情况:当用户在另一个AutoCompleteTextView(被调用状态)中键入至少两个字符时,我需要一个能够自动完成给定AutoCompleteTextView(称为:city)的代码。我使用的代码如下:
Main.java
Items.Where(t => t.GetType().GetProperty("ID")!=null));
ListCities类:
final String[] arrayEmpty = {""};
final EditText State = (EditText)findViewById(R.id.EditState);
State.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus)
{
if (!hasFocus) {
if(State.getText().toString().equalsIgnoreCase("Kerala")) {
listCities newClassObj = new listCities();
String [] Cities = newClassObj.list_Kerala();
AutoCompleteTextView StatesTextView;
ArrayAdapter<String> StatesAdapter;
StatesTextView = (AutoCompleteTextView) findViewById(R.id.EditCities);
StatesAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, Cities);
StatesTextView.setThreshold(2);
StatesTextView.setAdapter(StatesAdapter);
} else if(State.getText().toString().equalsIgnoreCase("Deli")) {
listCities newClassObj = new listCities();
String [] Cities = newClassObj.list_Deli();
AutoCompleteTextView StatesTextView;
ArrayAdapter<String> StatesAdapter;
StatesTextView = (AutoCompleteTextView) findViewById(R.id.EditCities);
StatesAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, Cities);
StatesTextView.setThreshold(2);
StatesTextView.setAdapter(StatesAdapter);
}
[ more lot of states and cityes ... ]
else { //Last Else clear the array
AutoCompleteTextView statesTextView;
ArrayAdapter<String> statesAdapter;
statesTextView = (AutoCompleteTextView) findViewById(R.id.EditCities);
statesAdapter = new ArrayAdapter<String>(Main.this, android.R.layout.simple_list_item_1, arrayEmpty);
StatesTextView.setThreshold(2);
StatesTextView.setAdapter(StatesAdapter);
}
}
}
});
代码完成了我的需要。但是,我想找到一种方法来提高效率,可能会使用更小的代码。有人能帮助我吗?
答案 0 :(得分:0)
重构代码应该可以让您更容易写出所有案例,并在执行此操作时最大限度地减少重复。我推荐使用更多&#34;通用&#34;命名为TextView和ArrayAdapter,您可以将它们用于所有案例,而不会对它们的作用感到困惑。
final String[] arrayEmpty = {""};
final EditText State = (EditText)findViewById(R.id.EditState);
State.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
listCities newClassObj = new listCities();
AutoCompleteTextView autoCompleteTextView;
ArrayAdapter<String> arrayAdapter;
String [] Cities;
if(State.getText().toString().equalsIgnoreCase("Kerala")) {
Cities = newClassObj.list_Kerala();
autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.EditCities);
arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, Cities);
}
else if(State.getText().toString().equalsIgnoreCase("Deli")) {
Cities = newClassObj.list_Deli();
autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.EditCities);
arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, Cities);
}
else { //Last Else clear the array
autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.EditBairro);
arrayAdapter = new ArrayAdapter<String>(DenunciaActivity.this, android.R.layout.simple_list_item_1, arrayEmpty);
}
autoCompleteTextView.setAdapter(arrayAdapter);
autoCompleteTextView.setThreshold(2);
}
}
});
您可以考虑的另一件事(我并非100%确定)是创建一个对象来处理为您实例化和管理所有这些变量。这会将if-elseif-else减少到像
这样的东西Cities[] cities;
if(State.getText().toString().equalsIgnoreCase("Kerala"))
{
cities = new City("Kerala");
}
else if() // etc.