当前位置: 首页 > 知识库问答 >
问题:

将两个图像数组从(Values)XML in设置为一个公共数组

乐华晖
2023-03-14

我是android编程的新手,尝试使用Typedarray将两个Image Array from(Values)XML in设置为一个公共数组。

下面是我的XML数组:

<array name="Img1">
<item>  @drawable/pic_1 </item>
<item>  @drawable/pic_2 </item> 
<item>  @drawable/pic_3 </item> 
</array>

<array name="Img2">
<item>  @drawable/pic_4 </item>
<item>  @drawable/pic_5 </item> 
<item>  @drawable/pic_6 </item> 
</array>
private TypedArray Images;

TypedArray img1 = res.obtainTypedArray(R.array.Img1);
TypedArray img2 = res.obtainTypedArray(R.array.Img2):

ArrayList<TypedArray> img = new ArrayList<TypedArray>();
img.addAll(Arrays.asList(img1));
img.addAll(Arrays.asList(img2));
Images = img.toArray(new TypedArray(img1.length()+img2.length); <-- NOT WORKING!
private ListView ListViewLayout;
private int[] ImagesID;
private EditText Search;
ArrayList<String> name = new ArrayList<String>();

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


    Resources res = getResources();

    String[] saugname = res.getStringArray(R.array.SauglanzeName);
    String[] pumpmname = res.getStringArray(R.array.PumpMName);


    String[] saugnummer = res.getStringArray(R.array.SauglanzeNumber);
    String[] pumpmnummer = res.getStringArray(R.array.PumpMNummer);

    TypedArray saugimg = res.obtainTypedArray(R.array.SauglanzeImg);
    TypedArray pumpmimg = res.obtainTypedArray(R.array.PumpeMImg);


    name.addAll(Arrays.asList(saugname));
    name.addAll(Arrays.asList(pumpmname));


    ArrayList<String> number = new ArrayList<String>();
    number.addAll(Arrays.asList(saugnummer));
    number.addAll(Arrays.asList(pumpmnummer));
    Number = number.toArray(new String[saugnummer.length+pumpmnummer.length]);

    ArrayList<Integer> imgInts = new ArrayList<Integer>();
    int nr = -1;
    while ( ++nr < saugimg.length() )
        imgInts.add (saugimg.getResourceId(nr, 0));
    nr = -1;
    while ( ++nr < pumpmimg.length() )
        imgInts.add (pumpmimg.getResourceId(nr, 0));
    ImagesID = new int[imgInts.size()];
    for (int i=0; i < imgInts.size(); i++)
    {
        ImagesID[i] = ((Integer) imgInts.get(i)).intValue();
    }

    Search = (EditText) findViewById(R.id.EditTextSearch);
    ListViewLayout = (ListView) findViewById(R.id.listViewLayoutSearch);
    final TIAdapter adapter = new TIAdapter(this, name, ImagesID, Number);
    ListViewLayout.setAdapter(adapter);
    ListViewLayout.setOnItemClickListener(this);

    Search.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    });

类适配器:

    class TIAdapter extends ArrayAdapter<String> {
    Context context;
    int [] ImagesID;
    ArrayList<String> NameArray;
    String[] NummerArray;

    TIAdapter(Context c, ArrayList<String> Artikel, int[] imgs, String[] Nummer) {
        super(c, R.layout.layout_text_image, R.id.textViewArtikel, Artikel);
        this.context = c;
        this.ImagesID = imgs;
        this.NameArray = Artikel;
        this.NummerArray = Nummer;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ImageView imageView = null;

        if(row == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.layout_text_image, parent, false);
            imageView = (ImageView)row.findViewById(R.id.imageViewArtikel);
        }
        else {
            imageView = (ImageView)row.findViewById(R.id.imageViewArtikel);
            DecodeTask dt1 = (DecodeTask)imageView.getTag(R.id.imageViewArtikel);
            if(dt1 != null)
                dt1.cancel(true);
        }

        imageView.setImageBitmap(null);
        DecodeTask dt2 = new DecodeTask(getContext(), imageView, ImagesID[position]);
        dt2.execute();

        TextView textViewArtikel = (TextView) row.findViewById(R.id.textViewArtikel);
        TextView textViewArtikelNummer = (TextView) row.findViewById(R.id.textViewArtikelNummer);

        imageView.setTag(R.id.imageViewArtikel, dt2);
        textViewArtikel.setText(name.get(position));
        textViewArtikelNummer.setText(Number[position]);
        return row;
    }
}

共有1个答案

魏高邈
2023-03-14

也许是这样的:

   ArrayList<Drawable> img = new ArrayList<Drawable>();

   int nr = -1;
   while ( ++nr < img1.length() )
       img.add( img1.getDrawable(nr));

   nr = -1;
   while ( ++nr < img2.length() )
       img.add( img2.getDrawable(nr));

   Drawable [] Images;
   Images = img.toArray(new Drawable[img.size()] );  
 类似资料:
  • 问题内容: 我有两个像 我希望它们合并成单个数组 问题答案: 您需要该方法。

  • 问题内容: 我需要一个将所有元​​素组合在一起的新数组,即 做这个的最好方式是什么? 对不起,我忘了,这些ID永远不会匹配,但是从技术上讲,这些名称可能会出现,但不可能出现,它们都必须列在一个数组中。我查看了array_merge,但不确定这是否是最佳方法。另外,您将如何对此进行单元测试? 问题答案: 效率更高,但有两种选择:

  • 问题内容: 我见过类似的问题,但没有一个提供我所要的答案,因此,如果这被认为是重复的,我在此致歉。我正在尝试将数组{1,2,3}和{4,5,6}合并为{1,2,3,4,5,6}。我做错了什么?我是java的新手。抱歉,问题很愚蠢。 问题答案: 代替 您需要调用merge方法,并将结果分配给数组,例如: 您的for循环也应该是:

  • 代码不止一次返回0和公共数字。我想让它返回一个数组与公共数字一次!那么,如何返回一个数组,数组中的数字对两个数组都是通用的。我想返回{2,7,4}-类似这样的东西。当我试图返回数组时,我总是出现越界异常。谢谢,巴里

  • 问题内容: 我很难弄清楚如何移动数组元素。例如,给出以下内容: 我为什么能写入移动功能之前? 还是之后? 移动后,应更新其余元素的索引。这意味着在第一个示例中,移动后arr [0] =’a’,arr [1] =’d’arr [2] =’b’,arr [3] =’c’,arr [4] = ‘e’ 这似乎应该很简单,但是我无法将其包裹住。 问题答案: 如果您想在npm上使用一个版本,则array-mo

  • 问题内容: 我正在尝试从Matplotlib图中获取一个numpy数组图像,目前正在通过保存到文件中,然后再读回文件的方式来完成此操作,但是我觉得必须有一种更好的方法。这是我现在正在做的事情: 我尝试了这个: 从我发现的示例中发现,但是它给我一个错误,指出“ FigureCanvasAgg”对象没有属性“ renderer”。 问题答案: 为了获得图形内容作为RGB像素值,需要首先绘制画布的内容。