2017-07-17 47 views
0

我正在写照片的应用程序。用户可以点击一个人的照片并对其进行标记。我想实现标记如下:如何使用Android Studio实现自动建议UI?

  • 1)用户看照片并认出约翰史密斯。
  • 2)用户点击文字输入框。
  • 3)用户开始输入“乔......”
  • 4)建议Gmail账户列表出现供用户(例如[email protected][email protected],乔安娜选择@ gmail.com)。
  • 5)用户点击列表中正确的帐户([email protected])。
  • 6)照片标有用户选择的帐户。

我已经实施了许多部分,除了第四。下面我介绍的代码为当前的UI:

// This method is invoked after the user finishes typing and clicks enter. 
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { 
    // other code 
    ... 

    String usersEntry = textView.getText().toString(); 
    tagPhotoWith(usersLabel); 
    return true; 
} 

目前的任何文本的用户类型后变成用户点击进入照片标记。相反,我希望应用显示建议的gmail.com帐户列表,以便用户可以选择适当的帐户进行标记。 如何做到这一点?

回答

2

你必须使用AutoCompleteTextView来获得对保存字符串的建议(就你而言,它们是Email-ID,无论是从数据库中提取还是在程序中预先定义)。

这里,一旦用户输入字符串的2或3个字符,就会在AutoCompleteTextView上设置一个适配器,以便为输入框设置字符串数组/ Arraylist。

AutoCompleteTextView textProductView; 
textProductView = (AutoCompleteTextView) findViewById(R.id.txtItem); 

ArrayAdapter<String> etAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, ITEMS); 
textProductView.setAdapter(etAdapter); 

这里,ITEMS是定义为每个从用户/数据库中读取或在预定义的活动数据的字符串数组。

2

如果你想显示自动完成良好的图形用户界面,你可以去任何一个popupwindow,或者你可以使用自定义列表视图或回收视图,并使用你的活动和XML中的可见性Gone/Visible。

我已经准备好使用Listview视图为我的应用程序定制自动搜索,如下所示。

//activity_main.xml 
<LinearLayout 
// parent layout 
    android:orientation="vertical" 
> 
    < ....  /* your code for toolbar */   ..../> 
    <Edittext 
     android:id="@+id/edittext" 
     /* your customization*/ 
     /> 
     <Relativelayou 
     android:height="match_parent" 
     android:width=""match_parent" 
     > 
      <LinearLayout > /*your main xml code*/ </LinearLayout> 
      <ListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/lstvw" 
      android:dividerHeight="0dp" 
      android:visibility="gone"> 

     </ListView> 

     </RelativeLayout> 

在您的MainActivity使用EditText.addTextChangedListener。

//MainActivity.java 
    EditText ed; 
    ListView lst; 
    ArrayList<String> array=new ArrayList<>(); 
    ArrayList<String> array1=new ArrayList<>(); 

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

    ed= (EditText) findViewById(R.id.edtxt); 
    lst= (ListView) findViewById(R.id.lstvw); 
    lst.setVisibility(View.GONE); 

    ed.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int ount, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      String str=ed.getText().toString(); 
      array1.clear(); 
      lst.setVisibility(View.VISIBLE); 
      for(int i=0;i<array.size();i++) 
      { 
       if(array.get(i).toLowerCase().startsWith(str.toLowerCase())) 
       { 
        array1.add(array.get(i)); 
       } 
      } 
      if((ArrayAdapter<String>)lst.getAdapter()!=null){ 
      ((ArrayAdapter<String>)lst.getAdapter()).notifyDataSetChanged();} 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
    lst.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      lst.setVisibility(View.GONE); 
     } 
    }); 

    ArrayAdapter<String> ad=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,array1); 
    ad.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
    lst.setAdapter(ad); 

}} 

在这里您可以根据您的设计使用自定义列表视图行。

希望这会帮助你!

相关问题