2016-06-23 8 views
-2

Ich möchte herausfinden, Benutzer von edittext angeben. Der Editiertext ist jedoch die erste Zeile der ListView. Wie kann ich das möglich machen?Wie kann ich Filter auf Listenansicht verwenden, wenn Sie etwas in Edittext in Android eingeben

public class ChatFragment extends Fragment { 
    private ListView chatListView; 
    private List<ChatItem> items; 
    private ChatAdapter chatAdapter; 

    public static ChatFragment newInstance(){ 
     ChatFragment fragment = new ChatFragment(); 
     return fragment; 
    } 

    @Override public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

    } 

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){ 
     View view = inflater.inflate(R.layout.chat_fragment, container, false); 
     chatListView = (ListView)view.findViewById(R.id.chatListView); 
     setupChatList(); 
     chatListView.setTextFilterEnabled(true); 
     return view; 
    } 

    public void setupChatList(){ 
     items = new ArrayList<>(); 
     items.add(new ChatItem(1, "","","","")); 
     items.add(new ChatItem(2 ,"layer1", "Chloe Grace Moretz", "Approved your see post request!", "4 mins")); 
     items.add(new ChatItem(3 ,"layer2", "Robert Downey", "ok!", "16:19")); 
     items.add(new ChatItem(4 ,"layer3", "Amanda Crew", "haha", "19:01")); 
     items.add(new ChatItem(5 ,"layer4", "Noah Urrea", "Good choice ~ man", "Yesterday")); 
     items.add(new ChatItem(6 ,"layer5", "Blake Rayne", "Jason Papadopoulos I think", "Sunday")); 
     chatAdapter = new ChatAdapter(getContext(), items); 
     chatListView.setAdapter(chatAdapter); 
    } 

    public void remove(){ 
     chatAdapter.remove(items.get(1)); 
    } 
} 

Mein Adapter ist unten:

public class ChatAdapter extends ArrayAdapter<ChatItem> { 
    private List<ChatItem> items; 
    private List<ChatItem> filteredData = null; 
    private TextView chatNameTxt; 
    private TextView msgTxt; 
    private TextView msgTimeTxt; 
    private ImageView chatImg; 
    private ImageView chatMoreImg; 
    private Context context; 
    private ItemFilter filter = new ItemFilter(); 
    private EditText findChat; 

    public ChatAdapter(Context context, List<ChatItem> items){ 
     super(context, -1, items); 
     this.items = items; 
     this.context = context; 
    } 

    @Override public View getView(int position, View convertView, ViewGroup parent){ 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (position==0){ 
      View item0 = inflater.inflate(R.layout.chat_list_view_item0, parent, false); 
      findChat = (EditText)item0.findViewById(R.id.findChat); 
      findChat.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) { 
        ChatFragment chatFragment = new ChatFragment(); 
        chatFragment.remove(); 
       } 
      }); 
      return item0; 
     }else { 
      View item = inflater.inflate(R.layout.chat_list_view, parent, false); 
      chatNameTxt = (TextView) item.findViewById(R.id.chatNameTxt); 
      msgTxt = (TextView) item.findViewById(R.id.msgTxt); 
      msgTimeTxt = (TextView) item.findViewById(R.id.msgTimeTxt); 
      chatImg = (ImageView)item.findViewById(R.id.chatImg); 
      chatMoreImg = (ImageView)item.findViewById(R.id.chatMoreImg); 

      ChatItem friendItem = items.get(position); 
      String chatName = friendItem.getUserNmae(); 
      String msg = friendItem.getLastMsg(); 
      String msgTime = friendItem.getLastMsgTime(); 
      String userImg = friendItem.getUserImageName(); 

      chatImg.setImageResource(context.getResources().getIdentifier(userImg, "drawable", context.getPackageName())); 
      chatNameTxt.setText(chatName); 
      msgTxt.setText(msg); 
      msgTimeTxt.setText(msgTime); 

      return item; 
     } 
    } 
} 
+0

beziehen Sie sich auf http://www.androidbegin.com/tutorial/android-search-listview-using-filter/ oder http://www.androidhive.info/2012/09/android-adding-search-functionality -to-listview/ –

+0

Würde gerne wissen, was du getan hast !!!! – Riten

+0

Fragen, die Hilfe benötigen, müssen * das gewünschte Verhalten *, * ein spezifisches Problem oder einen Fehler * und * den kürzesten erforderlichen Code * enthalten, um es ** in der Frage selbst zu reproduzieren **. Fragen ohne ** eine klare Problemstellung ** sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). –

Antwort

1

Um FilterListView wenn auf EditText eingeben Sie unten Art und Weise haben, folgen.

  1. TextWatcher zu EditText#addTextChangedListener
  2. In onTextChanged add hinzufügen oder Elemente aus Ihrem ListView ‚s-Adapter entfernen. Wenn Sie Unterklasse ArrayAdapter sind, würde es add und remove Methoden
  3. haben Wenn Sie Unterklasse BaseAdapter dann machen Sie BaseAdapter implements Filterable.

Anmerkung: Schritt 2: ist für ArrayAdapter und Schritt 3: ist für BaseAdapter.

+0

Es macht Sinn. Also denkst du das ich den filter nicht erweitern muss? –

+0

@YunyuenChan siehe hier ist einfach Beispiel werden Sie verstehen http://www.mysamplecode.com/2012/07/android-listview-edittext-filter.html auch Ihren 'Adapter extends baseAdapter implementiert Filterable'. – Ironman

+0

OK. Ich versuche das jetzt. –

0

Sie können Ihren Adapter Filterable machen. Es aktualisiert die Werte von listview automatisch.

Ich werde das Tutorial hier morgen schreiben und den Link behalten, um den Autor zu kreditieren.

+0

es verwendet notifyDataSetChanged(); Nach diesem Durchlauf wird die erste Zeile bereinigt, so dass der EditText entfernt wird. –

+0

Aber der EditText muss nicht Teil der Listenansicht sein ... –

+0

Ich hoffe, dass wenn der Benutzer nach unten scrollt, die EditText Suche nach oben geht. Also mache ich diese erste Zeile der ListView ist ein EditText. –

Verwandte Themen