java - Spinner 仅根据用户操作更新

标签 java android user-interface spinner android-adapter

我有 IconText,里面有图像和 TextView ,包括类和 xml。

然后,我使用扩展的 BaseAdapter (IconTextAdapter) 作为适配器,使用这些 IconText 填充 MainActivity 内部的 Spinner。

现在,IconText 可以正常工作(按应有的方式显示)。 然而微调器没有。

  1. 当我启动应用程序时,它会显示第一个 IconText。
  2. 当我打开选择对话框时,一切都按预期显示。
  3. 当我选择另一个项目时,选择对话框会折叠并且微调器不显示任何 IconText(即只有“向下箭头”用于打开选择对话框)。

我仍然可以打开选择对话框并选择另一个。 我注意到,如果我退出应用程序(返回按钮,而不是真正退出应用程序)并再次输入,则会显示正确的 IconText。

我猜是适配器出了问题? 我会尽量避免发布大量代码 [:

IconText.xml

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

    <ImageView android:id="@+id/it_image"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/home"/>

    <TextView
        android:id="@+id/it_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="20sp"
        android:text="ABC"
        android:textColor="@color/black_overlay"
        android:textSize="20sp"
        android:textStyle="bold" />
</LinearLayout>

图标文本.java

public class IconText {

    static LayoutInflater inflator;

    public ImageView icon;
    public TextView text;
    public View view;

    public IconText(String title, int icon_id){
        Log.d("IconText", "Create");
        view = inflator.inflate(R.layout.icon_text, null);

        text = (TextView) view.findViewById(R.id.it_text);
        icon = (ImageView) view.findViewById(R.id.it_image);

        text.setText(title);
        icon.setImageResource(icon_id);
    }

    public static void initInflator(Context context){
        if(inflator != null) return;
        Log.d("IconText", "Init inflator");
        inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
}

IconTextAdapter.java

public class IconTextAdapter extends BaseAdapter implements SpinnerAdapter{

    public ArrayList<IconText> items;

    public IconTextAdapter(){
        super();
        items = new ArrayList<>();
    }

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

    @Override
    public Object getItem(int arg0) {
        return items.get(arg0);
    }

    @Override
    public long getItemId(int position) {
        return items.get(position).view.getId();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return items.get(position).view;
    }
}

MainActivity,相关代码

void initFilter(){
        Log.d("MainAction", "Find Filter");
        filter = (Spinner) findViewById(R.id.filter);
        Log.d("MainAction", "Create Adapter");
        IconTextAdapter adapter = new IconTextAdapter();

        Log.d("MainAction", "Create items");
        for(int i=0; i<ETypes.names.length; i++){
            IconText it = new IconText(ETypes.names[i], ETypes.icons[i]);
            adapter.items.add(it);
        }
        Log.d("MainAction", "Setting adapter");
        filter.setAdapter(adapter);
    }

EType names[string] 和 icons[id] 是静态的。 充气机初始化成功。

我在 Android 方面的工作不多。如果是 Java/Swing,我想我会调用重绘之类的。

我知道这里有一些不好的做法(所有公共(public)变量,等等)。此代码仍处于早期原型(prototype)阶段,将很快修复。我不是在寻求优化,只是为了解决我的问题。

更新 1: 所以我看到我没有实现 getDropDownView 所以我实现了,与 getView 相同的代码(不需要发布它?)。

我还做了一个实验:在 IconText contrusctor 的末尾我添加了

view = text

它工作得很好(只显示文本)。

我想这表明问题出在自定义 View 上?

更新 2:

对 IconText 进行了另一项实验,设置 view = icon; 并且它的行为不正常,即。它的行为就像是自定义 View 。

最佳答案

并没有真正解决这个特定的错误,但它解决了我的问题。

Custom Image and Text View in Spinner Solution.

关于java - Spinner 仅根据用户操作更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849196/

相关文章:

java - 没有 textArea 的 JFileChooser

java - 在 O( (n+s) log n) 中计算圆交点

java - 如何用 Java 录制网络摄像头视频?

java - 替换算法

android - com.android.support :support-compat?对应的android库是什么

c# - 如何制作可调整大小的矩形选择工具?

css - Radix UI 主题深色模式未应用

java - Collectors.groupingBy (Function, Supplier, Collector) 不接受 lambda/看不到流值

android - 如何在Android中生成围绕圆的动态线

android - 进度条随 int 值变化