Spinner提供的资源ID无效

时间:2017-10-26 10:31:27

标签: java android android-spinner

我使用spinner sp填充了SpinnerAdapter适配器,当运行应用程序时,微调器将填充包含img和文本的Arraylist列表的第一项,但是当我点击微调器时,app停止并且Android Monitor说:资源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);
   }
}

ItemData:

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代码:

                <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>

1 个答案:

答案 0 :(得分:1)

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

android:src="@drawable/com0_yourrequest"

我认为这个资源不见了。如果它们在你的res文件夹中也检查其他资源,或者也不仔细检查名称。希望它有帮助!

点击拼写:

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

并将getDropDowenView的拼写更改为getDropDownView