2017-02-15 8 views
1

Я хочу, чтобы listView отображался только в том случае, если строка поиска была вставлена ​​в EditText. Ниже мой код ... Пожалуйста, помогите мне, я был бы очень обязан ...Показать Listview только при вводе строки поиска

public class MainActivity extends AppCompatActivity { 
    private ListView mSearchNFilterLv; 

    private EditText mSearchEdt; 

    private ArrayList<String> mStringList; 

    private ValueAdapter valueAdapter; 

    private TextWatcher mSearchTw; 
    /** 
    * ATTENTION: This was auto-generated to implement the App Indexing API. 
    * See https://g.co/AppIndexing/AndroidStudio for more information. 
    */ 
    private GoogleApiClient client; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     initUI(); 

     initData(); 

     valueAdapter = new ValueAdapter(mStringList, this); 

     mSearchNFilterLv.setAdapter(valueAdapter); 

     mSearchEdt.addTextChangedListener(mSearchTw); 


     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    } 


    private void initData() { 

     mStringList = new ArrayList<String>(); 

     mStringList.add("one"); 

     mStringList.add("two"); 

     mStringList.add("three"); 

     mStringList.add("four"); 

     mStringList.add("five"); 

     mStringList.add("six"); 

     mStringList.add("seven"); 

     mStringList.add("eight"); 

     mStringList.add("nine"); 

     mStringList.add("ten"); 

     mStringList.add("eleven"); 

     mStringList.add("twelve"); 

     mStringList.add("thirteen"); 

     mStringList.add("fourteen"); 

     mSearchTw = new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

       valueAdapter.getFilter().filter(s); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
              int after) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if(mSearchEdt.getVisibility() != View.VISIBLE) 
        mSearchEdt.setVisibility(View.VISIBLE); 
      } 
     }; 

    } 

    private void initUI() { 

     mSearchNFilterLv = (ListView) findViewById(R.id.list_view); 

     mSearchEdt = (EditText) findViewById(R.id.txt_search); 
    } 
} 

ответ

0

Вы можете использовать код ниже:

mSearchTw = 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) { 
     if (s != null && s.toString().trim().length() > 0) { 
      mSearchNFilterLv.setVisibility(View.VISIBLE); 
     } else { 
      mSearchNFilterLv.setVisibility(View.GONE); 
     } 
     } 

     @Override public void afterTextChanged(Editable s) { 

     } 
    }; 

Это покажет ListView, когда есть введенный текст (при вводе текста в EditText), и если текст имеет 1 или более символов.

Если вы хотите ListView быть изменены только тогда, когда курсор находится над переместить данный код в onTextChanged для afterTextChanged

PS: Вы можете использовать ту же структуру, с SearchView вместо EditText со слушателями запроса.

Обновлено

Вы можете использовать ниже код, чтобы скрыть ListView первоначально:

private void initUI() { 
    mSearchNFilterLv = (ListView) findViewById(R.id.list_view); 
    mSearchEdt = (EditText) findViewById(R.id.txt_search); 
    mSearchNFilterLv.setVisibility(View.GONE); 
} 
+0

Спасибо большое сэр за помощь ... Но это все еще показывает содержимое ListView при открытии приложения изначально ... Не могли бы вы помочь мне с этим ... –

+0

@ManujSankrit проверить обновленный ответ – rencsaridogan

+0

Спасибо большое сэр .... Он отлично работал ... Отличная помощь –