【问题标题】:Spinner gives Resource ID is not validSpinner 给出的资源 ID 无效
【发布时间】:2017-10-26 19:45:15
【问题描述】:

我使用了充满 SpinnerAdapter 适配器的微调器 sp,当运行应用程序时,微调器将填充 Arraylist 列表的第一项,其中包含 img 和文本,但是当我单击微调器时,应用程序停止并且 Android 监视器说:资源 ID #0x7f0e00d5 类型 #0x12 无效 .我看了一些与我的案例类似的案例,但没有帮助,这是我的代码:

   public class Serivce_Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.service_activity);

        ArrayList<ItemData> list = new ArrayList<>();
        list.add(new ItemData("tvsupport", R.drawable.com1_tvsupport));
        list.add(new ItemData("refrigerator", R.drawable.com2_refrigerator));
        list.add(new ItemData("wifi", R.drawable.com4_wifi));
        list.add(new ItemData("plumbing", R.drawable.com5_plumbing));

        Spinner sp = (Spinner) findViewById(R.id.request_spinner1);
        SpinnerAdapter adapter = new SpinnerAdapter(this, R.layout.spinner_layout, R.id.txt, list);
        sp.setAdapter(adapter);
  }
}

这是 SpinnerAdapter 类:

class SpinnerAdapter extends ArrayAdapter<ItemData>{
    private int groupid;
    Activity context;
    private ArrayList<ItemData> list;
    private LayoutInflater inflater;
    SpinnerAdapter(Activity context, int groupid, int id, ArrayList<ItemData> list){
        super(context,id,list);
        this.list=list;
        inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.groupid=groupid;
    }
    @NonNull
    public View getView(int position, View convertView, @NonNull ViewGroup parent){
        View itemView=inflater.inflate(groupid,parent,false);
        ImageView imageView=(ImageView)itemView.findViewById(R.id.img);
        imageView.setImageResource(list.get(position).getImageId());
        TextView textView=(TextView)itemView.findViewById(R.id.txt);
        textView.setText(list.get(position).getText());
        return itemView;
    }
   public View getDropDowenView(int position,View convertView,ViewGroup parent){
    return getView(position,convertView,parent);
   }
}

项目数据:

public class ItemData {
    String text;
    Integer imageId;

    public ItemData(String text, Integer imageId) {
        this.text = text;
        this.imageId = imageId;
    }
    public String getText(){
        return text;
    }

    public Integer getImageId(){
        return imageId;
    }
}

微调器代码:

                <Spinner
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:id="@+id/request_spinner1"
                    android:layout_gravity="center"
                   >
                </Spinner>

spinner_layout :

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/img"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginLeft="20dp"
        android:src="@drawable/com0_yourrequest" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">
    <TextView
        android:id="@+id/txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/selection"
        android:textColor="#2d5d13"
        android:textSize="20sp" />
</LinearLayout>

【问题讨论】:

  • 清理你的项目并重建
  • 我做了,但没有任何改变
  • 最小化您的R.layout.spinner_layout 布局。

标签: java android android-spinner


【解决方案1】:

在您的微调器布局中尝试删除此行

android:src="@drawable/com0_yourrequest"

我认为缺少此资源。并检查其他资源是否在您的 res 文件夹中或不仔细检查名称。希望对您有所帮助!

在这里检查拼写:

public View getDropDowenView(int position,View convertView,ViewGroup parent){ return getView(position,convertView,parent); }

将getDropDowenView的拼写改为getDropDownView

【讨论】:

  • 我删除了该行并检查了所有资源名称但没有任何改变
  • 好的兄弟,我会再次查看你的代码,希望能抓住你的错误并杀死它:)
  • SpinnerAdapter 适配器 = new SpinnerAdapter(this, R.layout.spinner_layout, R.id.txt, list);从这一行删除 R.id.text 并写 SpinnerAdapter adapter = new SpinnerAdapter(this, R.layout.spinner_layout, list);也更新适配器的构造函数
  • public View getDropDowenView(int position,View convertView,ViewGroup parent){ return getView(position,convertView,parent); } .... 这里的 dropDown 拼写不正确,请先尝试更改这些
  • 我认为拼写问题是主要原因尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2012-10-08
  • 1970-01-01
相关资源
最近更新 更多