2017-02-28 52 views
2

我正在将可搜索的微调器集成到我的应用中。下面是我的代码可搜索的微调适配器中的问题android

gradle这个文件

compile 'com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1' 

xml文档

<com.toptoche.searchablespinnerlibrary.SearchableSpinner 
    android:id="@+id/spinner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:hintText="Select Country"/> 

Man.java

public class MainActivity extends AppCompatActivity { 

SearchableSpinner mSearchableSpinner; 
ArrayList<GetCountry> mGetCountries; 
PriorityAdapter mPriorityAdapter; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mSearchableSpinner = (SearchableSpinner) findViewById(R.id.spinner); 

    mGetCountries = new ArrayList<>(); 
    GetCountry mGetCountry = new GetCountry(); 
    mGetCountry.setId("1"); 
    mGetCountry.setName("India"); 
    mGetCountries.add(mGetCountry); 

    GetCountry mGetCountry2 = new GetCountry(); 
    mGetCountry2.setId("2"); 
    mGetCountry2.setName("USA"); 
    mGetCountries.add(mGetCountry2); 


    GetCountry mGetCountry3 = new GetCountry(); 
    mGetCountry3.setId("3"); 
    mGetCountry3.setName("UK"); 
    mGetCountries.add(mGetCountry3); 

    GetCountry mGetCountry4 = new GetCountry(); 
    mGetCountry4.setId("4"); 
    mGetCountry4.setName("CHINE"); 
    mGetCountries.add(mGetCountry4); 

    GetCountry mGetCountry5 = new GetCountry(); 
    mGetCountry5.setId("5"); 
    mGetCountry5.setName("MALASIYA"); 
    mGetCountries.add(mGetCountry5); 

    mPriorityAdapter=new PriorityAdapter(mGetCountries); 
    mSearchableSpinner.setAdapter(mPriorityAdapter); 
} 


public class PriorityAdapter extends ArrayAdapter<GetCountry> { 

    ArrayList<GetCountry> list; 

    public PriorityAdapter(ArrayList<GetCountry> list) { 
     super(MainActivity.this, R.layout.spin_layout, list); 
     this.list = list; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { // Ordinary 


     return initView(position, convertView, parent); 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, 
           ViewGroup parent) { // This view starts when we click the 
     // spinner. 
     return initView(position, convertView, parent); 
    } 

    public View initView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflator = getLayoutInflater(); 
     convertView = inflator.inflate(R.layout.spin_layout, null); 
     TextView mTextView = (TextView) convertView 
       .findViewById(android.R.id.text1); 
     mTextView.setText(list.get(position).getName()); 
     return convertView; 
    } 

} 

} 

当我运行上面的代码我得到像下面的图像输出。自定义arraylist数据不显示它是java的每个项目的打印垃圾值 Spinner Output

任何想法我怎么能解决这个问题?

编辑

public class PriorityAdapter extends ArrayAdapter<GetCountry> { 

    ArrayList<GetCountry> list; 

    public PriorityAdapter(ArrayList<GetCountry> list) { 
     super(MainActivity.this, R.layout.spin_layout, list); 
     this.list = list; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { // Ordinary 


     return initView(position, convertView, parent); 
    } 

    @Nullable 
    @Override 
    public GetCountry getItem(int position) { 
     return super.getItem(position); 
    } 



    @Override 
    public View getDropDownView(int position, View convertView, 
           ViewGroup parent) { // This view starts when we click the 

     View view = convertView; 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     view = layoutInflater.inflate(R.layout.spin_layout_1, parent, false); 

     TextView tv= (TextView) view.findViewById(R.id.text1); 
     tv.setText(list.get(position).getName()); 
     return view; 

    } 

    public View initView(int position, View convertView, ViewGroup parent) { 


     View view = convertView; 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     view = layoutInflater.inflate(R.layout.spin_layout_1, parent, false); 

     TextView tv= (TextView) view.findViewById(R.id.text1); 
     tv.setText(list.get(position).getName()); 
     return view; 
    } 

} 

GetCountry.java

public class GetCountry { 
String name; 
String id; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 
} 
+0

我遇到了同样的问题,我唯一可以添加的是DropDownView并没有真正考虑到,而是您的类的.toString()。 我不(知道为什么,但似乎SpinnerSearchable不使用正确的适配器,或者可能我们失去了一些东西。 希望有人可以提供帮助。 干杯 – Gary89

+0

如何解决这个问题?我 –

回答

1

你可以尝试改变getView和getDropDownView返回值

这样;

View view = convertView; 
LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
view = layoutInflater.inflate(R.layout.spinneradapter, parent, false); 

TextView tv= (TextView) view.findViewById(R.id.tvEkipCantasiEkipman); 
tvAdet.setText(arrayListItem); 
return view; 
+0

onur:我试着用你的代码,但仍然面临相同的问题 –

+0

onur:检查我的编辑部分我尝试按照你的建议,但仍然面临同样的问题 –

+0

请分享你的GetCountry类,你已经定义了setId, setName和getName方法? –

0

因为getView和其他在PriorityAdapter中声明的方法根本没有调用,所以你得到这个列表。 那么为什么要使用自定义适配器,而不是只是去为下面的简单阵列适配器 -

String[] names = new String[]{"India","CHINA","UK","US","MALYSIA"}; 
     ArrayAdapter arrayAdapter = new ArrayAdapter(SearchActivity.this,android.R.layout.simple_spinner_dropdown_item,names); 
     mSearchableSpinner.setAdapter(arrayAdapter); 

添加在活动的onCreate方法这些线路,你会得到你的正确的下拉列表。

+0

其实我有自定义列表,所以我必须设计自定义适配器。任何解决方案@ B.shruti –