【发布时间】:2017-02-01 18:35:56
【问题描述】:
我有一个由自定义适配器填充的 Spinner。
我可以注销自定义适配器中的所有TextView,看看该位置的文本是什么。
位置 0 的文本视图文本:ABC 公司
位置 1 的文本视图文本:DEF 公司
位置 2 的文本视图文本:GHI 公司
位置 3 的文本视图文本:JKL 公司
位置 4 的文本视图文本:MNO 公司
位置 5 的文本视图文本:PQR 公司
所以我知道传递数据不是问题。
选择 Spinner 后,在应用中它只是显示为空白。
有人知道我做错了什么吗?
public class MyActivity extends AppCompatActivity {
private Spinner spinnerCompanies;
private ArrayList<HashMap> arrayOfCompanies;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_call);
spinnerCompanies = (Spinner) findViewById(R.id.spCompany);
//do background task and pass JSONArray to processCompanies
processCompanies(jsonArray);
}
public void processCompanies(JSONArray jsonArray){
arrayOfCompanies = new ArrayList<HashMap>();
HashMap company;
JSONObject record;
for (int i = 0; i < jsonArray.length(); i++) {
record = jsonArray.getJSONObject(i);
company = new HashMap<String, String>();
company.put("NAME", record.getString("CompanyName"));
arrayOfCompanies.add(company);
}
CompanyAdapter companyAdapter = new CompanyAdapter(arrayOfCompanies);
spinnerCompanies.setAdapter(companyAdapter);
spinnerCompanies.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
didSelectCompany(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private void didSelectCompany(int position){
Log.i(TAG, "didSelectCompany: " + position);
}
public class CompanyAdapter extends BaseAdapter {
private final ArrayList<HashMap> mArrayList;
public CompanyAdapter(ArrayList<HashMap> map) {
mArrayList = map;
}
@Override
public int getCount() {
return mArrayList.size();
}
@Override
public HashMap<String, String> getItem(int position) {
return mArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_company, parent, false);
}
HashMap<String, String> item = getItem(position);
TextView textView = (TextView) convertView.findViewById(R.id.tvSubTermainalName);
textView.setText(item.get("NAME"));
Log.d(TAG, "TEXT VIEW AT POSITION " + position + " TEXT: " + textView.getText());
return convertView;
}
}
}
R.layout.item_company XML由自定义适配器使用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvSubTermainalName"/>
</LinearLayout>
【问题讨论】:
-
一个问题可能是,在
getItemId中使用return position; -
这不起作用@PavneetSingh
-
不是日志
Log.i(TAG, "didSelectCompany:正在工作,因为现在onItemSelected代码只是显示一个日志 -
下拉菜单中没有任何内容。
标签: java android android-layout android-arrayadapter android-spinner