android - 带有奇怪文本的微调下拉菜单

标签 android spinner android-arrayadapter

我正在开发一个带有微调器的 Android 应用程序。

我有这个问题:

enter image description here

这是微调器数组适配器代码:

public class OrderArticlesAdaper extends ArrayAdapter<Article>
{
    private Context mContext;
    private int layoutResourceId;
    private ArrayList<Article> articles;

    public OrderArticlesAdaper(Context context, int listItemResourceId,
            ArrayList<Article> dbArticles)
    {
        super(context, listItemResourceId, dbArticles);

        this.mContext = context;
        this.layoutResourceId = listItemResourceId;
        this.articles = dbArticles;
    }

    public ArrayList<Article> getArticles()
    {
        return this.articles;
    }

    @Override
    public int getCount()
    {
        return articles.size();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        Log.v("OrderArticlesAdaper", "getView.postion: " + position);
        View row = convertView;
        if (row == null)
        {
            LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
        }

        Article article = articles.get(position);
        if (article != null)
        {
            TextView formNameView = (TextView)row.findViewById(android.R.id.text1);
            formNameView.setText(new Long(article.getArticleId()).toString());
        }
        return row;
    }
}

这是加载微调器数据的异步任务:

private class LoadEReportAsyncTask extends AsyncTask<String, Void, Boolean>
{
    private Context mContext;
    private ProgressDialog loadingDialog;
    private EReport eReport;
    private QAP qap;

    public LoadEReportAsyncTask(Context context)
    {
        Log.v("LoadEReportAsyncTask", "constructor");
        eReport = null;
        qap = null;

        this.mContext = context;
        loadingDialog = new ProgressDialog(mContext);
        loadingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        loadingDialog.setMessage(getString(R.string.msg_loading_ereport));
        loadingDialog.setCancelable(false);
        loadingDialog.show();
    }

    @Override
    protected Boolean doInBackground(String... params)
    {
        Log.v("LoadEReportAsyncTask", "doInBackground");
        DBManager dbMan;
        dbMan = new DBManager(mContext);

        // Es un nuevo EReport, por lo tanto lo creo en la base de datos.
        if (eReportId == -1)
        {
            // Time In
            TextView aux = (TextView)((EReportFinalInspecActivity) mContext).findViewById(R.id.timeInVal);

            Calendar c = Calendar.getInstance();
            SimpleDateFormat df3 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            String timeIn = df3.format(c.getTime());
            aux.setText(timeIn);

            eReport = new EReport();
            eReport.setOrderId(orderId);
            eReport.setQapId(qapId);
            eReport.setTimeIn(timeIn);

            eReportId = dbMan.insertEReport(eReport);
        }
        else
        {
            eReport = dbMan.getEReport(eReportId);
        }

        qap = dbMan.getQPA(params[0]);
        ordersArticles = dbMan.getOrderArticles(orderId);

        selectedArticles = new ArrayList<Article>(ordersArticles.size());

        return true; // TODO: Controlar los errores
    }

    protected void onPostExecute(Boolean result)
    {
        Log.v("LoadEReportAsyncTask", "onPostExecute");

        EReportFinalInspecActivity act = (EReportFinalInspecActivity) mContext;
        if (result)
        {
            Toast.makeText(getApplicationContext(), getString(R.string.msg_ereport_got_correct), Toast.LENGTH_SHORT).show();

            act.fillEReport(eReport, qap);
            Spinner articleSpin = (Spinner) act.findViewById(R.id.articlesSpiner);
            OrderArticlesAdaper spinAdapter = new OrderArticlesAdaper(mContext, android.R.layout.simple_spinner_item, ordersArticles);
            spinAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            articleSpin.setAdapter(spinAdapter);

            // TODO: Esto hay que cambiarlo porque siempre habrá QAP.
            if (qap != null)
                act.eReportHasQAP(true, qap.getName());
            else
                act.eReportHasQAP(false, null);
        }
        else
        {
            Toast.makeText(getApplicationContext(), getString(R.string.msg_ereport_problem), Toast.LENGTH_LONG).show();
        }

        loadingDialog.dismiss();
    }
}

我做错了什么?

最佳答案

尝试:

formNameView.setText(Long.toString(article.getArticleId()));

编辑:

这只是一个猜测,但也许 Android 正在使用 Article.toString() 填充微调器下拉 TextView ,因为您的适配器处理 Article 类型的对象。

要对此进行测试,请在您的 Article 类中覆盖 toString。

public class Article {
    ...
    @Override
    public String toString() {
        mArticleId.toString(); // This is the private field holding the long id.
    }
}

关于android - 带有奇怪文本的微调下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11074059/

相关文章:

android - 使用代码创建网络接入点名称,

java - (Android) 使用 HttpUrlConnection 编写 curl POST 命令

android - 两个 View 之间的自定义画线无法正常工作

java - 当我单击并选择微调项目时,光标将自动进入空白编辑文本?

android - 如何指定 ArrayAdapter 的哪个字符串用于 ListFragment?

android - 用于聊天应用程序的自定义数组适配器

android - 从纬度和经度坐标数组列表向谷歌地图添加多个标记

当列表行中填充微调器时,android onListItemClick 不工作

java - 如何使用 Spinner.setAdapter 在 Spinner 中显示字符串数组?

java - Android - 如何异步更新ArrayAdapter?