2017-01-10 51 views
0

My output coming like this我在做一個應用程序。因爲我需要搜索回收商物品,並且一旦用戶從回收商選擇物品,那麼它應該被設置爲該編輯文本的標籤。我從https://android-arsenal.com/details/1/3581這樣做過,但它不能正常工作。任何幫助我可以如何實現從回收站視圖中搜索項目並將其設置爲該選定項目的編輯標籤。 enter image description hereRecyclerView with editTags

這是供參考的屏幕。

我做喜歡提前這個

public class ActivityTagFriends extends BaseActivity implements TagsEditText.TagsEditListener, View.OnClickListener { 
    TextView tv_cancel, tv_title, tv_Done; 
    RecyclerView rv_TagFriends; 
    private TagsEditText mTagsEditText; 

    private List<String> list = new ArrayList<String>(); 
    TagFriendsAdapter mAdapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_tag_friends); 

     tv_cancel = (TextView) findViewById(R.id.tvCancel); 
     tv_cancel.setText("Cancel"); 
     tv_cancel.setTextColor(getResources().getColor(R.color.red)); 
     tv_title = (TextView) findViewById(R.id.tvTitle); 
     tv_title.setText("Tag Friends"); 
     tv_title.setTextColor(getResources().getColor(R.color.black)); 
     tv_Done = (TextView) findViewById(R.id.tvDone); 
     tv_Done.setText("Done"); 
     tv_Done.setTextColor(getResources().getColor(R.color.red)); 

     rv_TagFriends= (RecyclerView) findViewById(R.id.rv_TagFriends); 
     mTagsEditText = (TagsEditText) findViewById(R.id.tagsEditText); 
     mTagsEditText.setHint("Search"); 
     mTagsEditText.setTagsListener(this); 
     mTagsEditText.setTagsWithSpacesEnabled(true); 
     mTagsEditText.setAdapter(new ArrayAdapter<>(this, 
       R.layout.tag_friends_row, R.id.tv_TagName,list)); 
     mTagsEditText.setThreshold(1); 

     rv_TagFriends.setHasFixedSize(true); 
     rv_TagFriends.setLayoutManager(new LinearLayoutManager(this)); 


     countryList(); // in this method, Create a list of items. 

     // call the adapter with argument list of items and context. 
     // mAdapter = new TagFriendsAdapter(list,this); 
     // rv_TagFriends.setAdapter(mAdapter); 

     addTextListener(); 


    } 

    // this method is used to create list of items. 
    public void countryList(){ 

     list.add("Afghanistan"); 
     list.add("Albania"); 
     list.add("Algeria"); 
     list.add("Bangladesh"); 
     list.add("Belarus"); 
     list.add("Canada"); 
     list.add("Cape Verde"); 
     list.add("Central African Republic"); 
     list.add("Denmark"); 
     list.add("Dominican Republic"); 
     list.add("Egypt"); 
     list.add("France"); 
     list.add("Germany"); 
     list.add("Hong Kong"); 
     list.add("India"); 
     list.add("Iceland"); 

    } 



    public void addTextListener(){ 

     mTagsEditText.addTextChangedListener(new TextWatcher() { 

      public void afterTextChanged(Editable s) {} 

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

      public void onTextChanged(CharSequence query, int start, int before, int count) { 

       query = query.toString().toLowerCase(); 

       final List<String> filteredList = new ArrayList<>(); 

       for (int i = 0; i < list.size(); i++) { 

        final String text = list.get(i).toLowerCase(); 
        if (text.contains(query)) { 

         filteredList.add(list.get(i)); 

        } 
       } 

       rv_TagFriends.setLayoutManager(new LinearLayoutManager(ActivityTagFriends.this)); 
       mAdapter = new TagFriendsAdapter(filteredList, ActivityTagFriends.this); 

       rv_TagFriends.setAdapter(mAdapter); 
       mAdapter.notifyDataSetChanged(); 
       // data set changed 
      } 
     }); 


    } 




    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
     if (hasFocus) { 
      // mTagsEditText.showDropDown(); 

       // data set changed 
     } 
    } 

    @Override 
    public void onClick(View v) { 


    } 

    @Override 
    public void onTagsChanged(Collection<String> tags) { 

    } 

    @Override 
    public void onEditingFinished() { 

    } 
} 

感謝。

+0

[標籤的Android或氣泡中的EditText(http://stackoverflow.com/questions/8090711/android-labels-or-bubbles-in-edittext) –

+0

我想這是我的我的實現是可能的複製不同。如果我在editext中搜索,並且如果我選擇了回收站項目,那麼該標記應該設置爲edittext和標記shoild申請該項目 – Yamuna

+0

有edittext庫可用於實現標記,使用它並在您的recyclerView適配器類中實現'Filterable'和搜索時調用過濾器方法。爲recyclerview項目添加onclick監聽器,並在ontext中將onClick設置爲標記。就是這麼簡單 –

回答

1

好我得到了你的問題,使用此代碼

你的活動佈局(activity_main.xml中)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:TagsEditText="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="mabbas007.myapplication.MainActivity"> 

    <mabbas007.tagsedittext.TagsEditText 
    android:id="@+id/tagsEditText" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    TagsEditText:allowSpaceInTag="true" 
    TagsEditText:tagsBackground="@drawable/square_default" 
    TagsEditText:tagsCloseImageRight="@drawable/tag_close" /> 

    <TextView 
    android:background="@android:color/darker_gray" 
    android:padding="10dp" 
    android:gravity="center" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Suggestion"/> 

    <android.support.v7.widget.RecyclerView 
    android:id="@+id/rv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
    </LinearLayout> 

適配器佈局(adapter_item.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
    android:padding="10dp" 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
    <View 
    android:layout_width="match_parent" 
    android:background="@color/colorAccent" 
    android:layout_height="1dp"/> 

    </LinearLayout> 

活動代碼

public class MainActivity extends AppCompatActivity 
    implements TagsEditText.TagsEditListener { 

RecyclerView rv_TagFriends; 
    private TagsEditText mTagsEditText; 

    private List<String> list = new ArrayList<String>(); 
    TagFriendsAdapter mAdapter; 
    ArrayList<String > tags; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tags=new ArrayList<>(); 
    rv_TagFriends= (RecyclerView) findViewById(R.id.rv); 
    mTagsEditText = (TagsEditText) findViewById(R.id.tagsEditText); 
    mTagsEditText.setHint("Search"); 
    mTagsEditText.setTagsListener(this); 
    mTagsEditText.setTagsWithSpacesEnabled(true); 
    //mTagsEditText.setAdapter(mAdapter); 
    mTagsEditText.setThreshold(1); 

    rv_TagFriends.setHasFixedSize(true); 
    rv_TagFriends.setLayoutManager(new LinearLayoutManager(this)); 


    countryList(); // in this method, Create a list of items. 

    // call the adapter with argument list of items and context. 
    // mAdapter = new TagFriendsAdapter(list,this); 
    // rv_TagFriends.setAdapter(mAdapter); 

    addTextListener(); 


    } 

    // this method is used to create list of items. 
    public void countryList(){ 

    list.add("Afghanistan"); 
    list.add("Albania"); 
    list.add("Algeria"); 
    list.add("Bangladesh"); 
    list.add("Belarus"); 
    list.add("Canada"); 
    list.add("Cape Verde"); 
    list.add("Central African Republic"); 
    list.add("Denmark"); 
    list.add("Dominican Republic"); 
    list.add("Egypt"); 
    list.add("France"); 
    list.add("Germany"); 
    list.add("Hong Kong"); 
    list.add("India"); 
    list.add("Iceland"); 

    } 



    public void addTextListener(){ 

    mTagsEditText.addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) {} 

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

    public void onTextChanged(CharSequence query, int start, int before, int count) { 

    query = query.toString().toLowerCase().trim(); 
    if (query.toString().equals("")) 
    return; 
    if (tags.size()!=0) 
    query=query.toString().substring(query.toString().indexOf(tags.get(tags.size()-1).toLowerCase())+tags.get(tags.size()-1).toString().length()).trim(); 
    if (query.toString().equals("")){ 
    final List<String> filteredList = new ArrayList<>(); 
    rv_TagFriends.setLayoutManager(new LinearLayoutManager(MainActivity.this)); 
    mAdapter = new TagFriendsAdapter(filteredList, MainActivity.this); 
    rv_TagFriends.setAdapter(mAdapter); 
    }else { 
    final List<String> filteredList = new ArrayList<>(); 
    for (int i = 0; i < list.size(); i++) { 
    final String text = list.get(i).toLowerCase(); 
    if (text.contains(query)) { 
    filteredList.add(list.get(i)); 
    } 
    } 

    rv_TagFriends.setLayoutManager(new LinearLayoutManager(MainActivity.this)); 
    mAdapter = new TagFriendsAdapter(filteredList, MainActivity.this); 
    rv_TagFriends.setAdapter(mAdapter); 
    } 


    } 
    }); 


    } 







    @Override 
    public void onTagsChanged(Collection<String> tags) { 

    } 

    @Override 
    public void onEditingFinished() { 

    } 


    public class TagFriendsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ 

    private List<String > data; 
    private MainActivity mainActivity; 

    public TagFriendsAdapter(List<String> data , MainActivity mainActivity) { 
    this.data = data; 
    this.mainActivity=mainActivity; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_item, parent, false)); 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
    ((MyViewHolder)holder).text.setText(data.get(position)+""); 
    ((MyViewHolder)holder).text.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    mainActivity.add(data.get(position)+""); 
    } 
    }); 
    } 

    @Override 
    public int getItemCount() { 
    return data.size(); 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
    TextView text; 
    public MyViewHolder(View itemView) { 
    super(itemView); 
    text = (TextView) itemView.findViewById(R.id.text); 
    } 
    } 
    } 



    public void add(String s){ 
    for (int i = 0; i < tags.size(); i++) { 
    if (s.equals(tags.get(i))) 
    return; 
    } 
    tags.add(s); 
    String [] tag=tags.toArray(new String [0]); 
    mTagsEditText.setTags(tag); 
    } 

    } 
+0

嗨,它顯示IndexOutOfBound異常,如果我添加第二項.. – Yamuna

+0

複製這個代碼或仍存在的問題,然後分享您的代碼。 –

+0

是啊我仍然在索引綁定異常有時 – Yamuna