Android - 从另一个类获取字符串数组:更高效的代码

时间:2018-02-14 22:07:53

标签: java android

我遇到以下情况:当用户在另一个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);
     }
     }

     }
                });

代码完成了我的需要。但是,我想找到一种方法来提高效率,可能会使用更小的代码。有人能帮助我吗?

1 个答案:

答案 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.