1

配列を配列にコピーしたい。このようなことは可能ですか?

配列「arrayListデータ」からいくつかの値を取得したい

その配列には値が含まれていました

ここに画像の説明を入力

3 行目の値を入力する配列として、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

意味のある異なる値を格納するために配列を使用することはお勧めしません。必要なすべての関連値を保持するクラスを作成し、そのクラスのインスタンスを使用することをお勧めします。

次のステップは、行/列に基づいていくつかのインスタンスを作成し、データ構造 (リスト/マップ/セットなど) を使用してすべてのインスタンスを保持することです。

于 2013-08-28T07:59:03.873 に答える