1

我想将数组复制到数组。有可能这样吗?

我想从数组“arrayList data”中获取一些值

在该数组中包含一个值

在此处输入图像描述

我将 inkLevels 声明为我的数组,以便为​​第三行设置值。我只需要最后一行的值。在 GetInkLevel 内部。我有一些方法,但我确定这不是好方法。你有什么建议吗?

public class ActivityToSmartWatch extends BaseAdapter {


private Activity activity;
private ArrayList<String[]> data;
private static LayoutInflater inflater = null;
private String[] inkLevels = new String[5];

public ActivityToSmartWatch(Activity a, ArrayList<String[]> inkLevels) {
    activity = a;
    data = inkLevels;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}


public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View vi = convertView;
    if (convertView == null)
        vi = inflater
                .inflate(R.layout.listviewitem_ink, null);

    if (data.get(position)[0].equals("C")) 
    {
        TextView inkLevel = (TextView)vi.findViewById(R.id.lvi_colorLevel);
        inkLevel.setText(data.get(position)[2]);    
    } 
    else if (data.get(position)[0].equals("Y")) 
    {
        TextView inkLevel = (TextView)vi.findViewById(R.id.lvi_colorLevel);
        inkLevel.setText(data.get(position)[2]);    
    } 
    else if (data.get(position)[0].equals("M"))
    {
        TextView inkLevel = (TextView)vi.findViewById(R.id.lvi_colorLevel);
        inkLevel.setText(data.get(position)[2]);    
    } 
    else if (data.get(position)[0].equals("B"))
    {
        TextView inkLevel = (TextView)vi.findViewById(R.id.lvi_colorLevel);
        inkLevel.setText(data.get(position)[2]);    
    }


    return vi;

}


public String[] getInkLevel (String [] inkLevels, int position)
{
    for (int i= 0; i <data.size(); i++)
    {
        inkLevels[i] = data.get(i);
    }

    return inkLevels;
}
}
4

3 回答 3

2

正如我多次说过的,为什么不直接将其换成对象,而不是处理数组呢?

public class PrinterColour
{
      // Include your data here.
      private String colorName;
      private int level;

      // Getters and Setters.
}

然后复制它们只是传递引用的一种情况。

于 2013-08-28T07:59:27.503 回答
0

该方法应如下所示:

public String[] getInkLevel(String[] inkLevels, int position)
{
  for (int i = 0; i < data.get(position).length; i++)
  {
    inkLevels[i] = data.get(position)[i];
  }
  return inkLevels;
}

您试图从 中的元素分配数组中的元素ArrayList,而不是从ArrayList.

System.arrayCopy简化它:

public String[] getInkLevel(String[] inkLevels, int position)
{
  System.arraycopy(data.get(position), 0, inkLevels, 0, data.get(position).length);
  return inkLevels;
}

您也可以只返回适用的数组(如果您很高兴更改反映在 中data):

public String[] getInkLevel(int position)
{
  return data.get(position);
}
于 2013-08-28T07:59:00.380 回答
0

不建议使用数组来存储有意义的不同值。最好创建一个类来保存您需要的所有相关值并使用该类的实例。

下一步是基于 row/col 创建多个实例,并使用数据结构(list/map/set 等)来保存所有实例。

于 2013-08-28T07:59:03.873 回答