gpt4 book ai didi

Android微调器显示对象引用而不是字符串

转载 作者:IT老高 更新时间:2023-10-28 23:17:42 25 4
gpt4 key购买 nike

好的,我的微调器有问题。它填充了从 Web 服务中提取的数据。我遇到的问题是,当未单击微调器而不是显示微调器中第一项的字符串时,它会显示它的对象引用。

我已经查看了相关问题,但仍然看不到我缺少什么,是否就像缺少 toString 引用一样简单?

这是填充微调器的代码

private void buildDrinkDropDown() {

List<NameValuePair> apiParams = new ArrayList<NameValuePair>(1);
apiParams.add(new BasicNameValuePair("call", "drinkList"));

bgt = new BackGroundTask(MAP_API_URL, "GET", apiParams);

try {

JSONArray drinks = bgt.execute().get();

for (int i = 0; i < drinks.length(); i++) {

JSONObject d = drinks.getJSONObject(i);

String id = d.getString(TAG_ID_DRINK);
String createdAt = d.getString(TAG_CREATED_AT);
String updatedAt = d.getString(TAG_UPDATED_AT);
String price = d.getString(TAG_PRICE);
String name = d.getString(TAG_NAME);

drinkList.add(new Drink( createdAt ,id, name, price,updatedAt ));
}

drinkField = (Spinner) findViewById(R.id.countryField);
DrinkAdapter dAdapter = new DrinkAdapter(this, android.R.layout.simple_spinner_item, drinkList);
drinkField.setAdapter(dAdapter);

drinkField.setOnItemSelectedListener(new OnItemSelectedListener(){

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//Drink selectedDrink = drinkList.get(position);
GlobalDrinkSelected = drinkList.get(position).getId().toString();

}

@Override
public void onNothingSelected(AdapterView<?> parent) {}


});

} catch (JSONException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}

这是适配器类的代码

package com.android.main;

import java.util.ArrayList;

import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class DrinkAdapter extends ArrayAdapter<Drink>
{
private Activity context;
ArrayList<Drink> data = null;

public DrinkAdapter(Activity context, int resource, ArrayList<Drink> data)
{
super(context, resource, data);
this.context = context;
this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{ // Ordinary view in Spinner, we use android.R.layout.simple_spinner_item
return super.getView(position, convertView, parent);
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{ // This view starts when we click the spinner.
View row = convertView;
if(row == null)
{
LayoutInflater inflater = context.getLayoutInflater();
row = inflater.inflate(R.layout.dropdown_value_id, parent, false);
}

Drink item = data.get(position);
String test = item.getName();
Log.d("test ", test);

if(item != null)
{

TextView drinkName = (TextView) row.findViewById(R.id.item_value);

if(drinkName != null){
drinkName.setText(item.getName());
Log.d("find me ", drinkName.toString());
}

}

return row;
}
}

这是适配器中使用的 dropdown_value_id 布局的 xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/item_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>

如果需要更多信息,请大声喊叫。

任何帮助将不胜感激

编辑:截图

Screenshot of spinner

最佳答案

我遇到了类似的问题,但是我使用的是默认的 ArrayAdapter,而没有在单独的类中扩展它。稍微研究了一下,我发现了这个:

However the TextView is referenced, it will be filled with the toString() of each object in the array. You can add lists or arrays of custom objects. Override the toString() method of your objects to determine what text will be displayed for the item in the list.

默认的 ArrayAdapter 将对数组中已传递给 Adapter 的每个对象调用 .toString()。如果你的 DrinkAdapter 只是显示饮料的名称,你可以重写 toString() 方法并完成

适配器:

ArrayAdapter<Drink> drinkAdapter = new ArrayAdapter<Drink>(getActivity(), android.R.layout.simple_spinner_dropdown_item, drinks);

类对象:

public Drink {

String name;

// Constructor, getters, and setters for the object here

@Override
public String toString() {
return getName(); // You can add anything else like maybe getDrinkType()
}
}

你已经完成了,不需要为你的 DrinkAdapter 创建一个单独的类

关于Android微调器显示对象引用而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15776661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com