簡體   English   中英

如何從另一個類訪問我在 Android 中的靜態 ArrayList

[英]How to access my static ArrayList in Android from another class

我正在為我的項目研究 Kmeans 算法。 這是 KMeans.java :

package com.taffycrash;

import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;

/**
 * Created by msı on 1.11.2015.
 */
public class KMeans extends Activity {
    private ArrayList<Integer> uzayKumesi = new ArrayList<Integer>();
    private ArrayList<Integer> kume1 = new ArrayList<Integer>();
    private static  ArrayList<String> kume_1 = new ArrayList<String>();
    private ArrayList<Integer> kume2 = new ArrayList<Integer>();
    private static ArrayList<String> kume_2 = new ArrayList<String>();
    private ArrayList<Integer> kume3 = new ArrayList<Integer>();
    private static ArrayList<String> kume_3 = new ArrayList<String>();
    private ArrayList<String> mStringList = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
        try {
            AssetManager assetManager = getAssets();
            InputStream is = assetManager.open("renkler.txt");

            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
            String str = "";


            while ((str = bufferedReader.readLine()) != null)
                mStringList.add(str); //veriler tek tek okunuyor;

            bufferedReader.close();                   

            for (int i = 0; i < mStringList.size(); i++) {
                uzayKumesi.add(Integer.parseInt(mStringList.get(i), 16));
            }

            int merkez1, merkez2, merkez3;
            merkez1 = Integer.parseInt("0000CD", 16);
            merkez2 = Integer.parseInt("00008B", 16);
            merkez3 = Integer.parseInt("000080", 16); //setting random centers for 3 clusters using K-Meaans algorithm

            boolean degisim = true;
            int temp[] = new int[3];
            int eskimerkez1 = 0, eskimerkez2 = 0, eskimerkez3 = 0;
            long toplam = 0;
            myloop:
            while (degisim) {
                kume1.clear();
                kume2.clear();
                kume3.clear();
                for (int i = 0; i < uzayKumesi.size(); i++) {

                    temp[0] = Math.abs(merkez1 - uzayKumesi.get(i));
                    temp[1] = Math.abs(merkez2 - uzayKumesi.get(i));
                    temp[2] = Math.abs(merkez3 - uzayKumesi.get(i));

                    if (temp[0] < temp[1] && temp[0] < temp[2]) kume1.add(uzayKumesi.get(i));
                    else if (temp[1] < temp[0] && temp[1] < temp[2]) kume2.add(uzayKumesi.get(i));
                    else if (temp[2] < temp[0] && temp[2] < temp[1]) kume3.add(uzayKumesi.get(i));
                }

                eskimerkez1 = merkez1;
                eskimerkez2 = merkez2;
                eskimerkez3 = merkez3;

                for (int m = 0; m < kume1.size(); m++) {
                    toplam += kume1.get(m);
                }
                if (kume1.size() != 0)
                    Math.abs(merkez1 = (int) toplam / (kume1.size()));                
                toplam = 0;
                for (int j = 0; j < kume2.size(); j++) {
                    toplam += kume2.get(j);
                }
                if (kume2.size() != 0)
                    Math.abs(merkez2 = (int) toplam / (kume2.size()));                
                toplam = 0;
                for (int k = 0; k < kume3.size(); k++) {
                    toplam += kume3.get(k);
                }
                if (kume3.size() != 0)
                    Math.abs(merkez3 = (int) toplam / (kume3.size()));              

                if (merkez1 == eskimerkez1 && merkez2 == eskimerkez2 && merkez3 == eskimerkez3) {
                    degisim = false;
                    break myloop;
                }
                if (merkez3 == eskimerkez3 && merkez1 == eskimerkez1 && merkez2 == eskimerkez2) {
                    degisim = false;
                    break myloop;
                }
                if (merkez2 == eskimerkez2 && merkez3 == eskimerkez3 && merkez1 == eskimerkez1) {
                    degisim = false;
                    break myloop;
                }

            }// end while 
                if (kume1.size() != 0) {
                    for (int i = 0; i < kume1.size(); i++)
                        kume_1.add("#" + Integer.toHexString(kume2.get(i)));                       
                }
                if (kume2.size() != 0) {
                    for (int i = 0; i < kume2.size(); i++)
                       kume_2.add("#" + Integer.toHexString(kume2.get(i)));

                }
                if (kume3.size() != 0) {
                    for (int i = 0; i < kume3.size(); i++)
                        kume_3.add("#" + Integer.toHexString(kume3.get(i)));

                }


        } catch (IOException e) {
                e.printStackTrace();
            }
        }

我想從另一個擴展 View class 的類訪問這些特定的 ArrayList ,它們是 kume_1,kume_2 和 kume_3(不是 kume1,kume2,kume3)。 這是 MyView.java:

package com.taffycrash;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

import java.util.ArrayList;

public class MyView extends View {
    KMeans kmeans = new KMeans();
    ArrayList<Paint> paint= new ArrayList<Paint>();

    public MyView(Context context) {
        super(context);
        init();
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init(){           
        for(int i =0;i<142;i++) {
            paint.add(new Paint());
            paint.get(i).setColor(Color.parseColor(kmeans.kume_1.get(0)));
            paint.get(i).setStyle(Paint.Style.FILL);
        }      

    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        canvas.drawCircle(50, 50, 20, paint.get(0));
        canvas.drawCircle(50, 150, 20, paint.get(1));
        canvas.drawCircle(50, 250, 20, paint.get(2));
        canvas.drawCircle(50, 350, 20, paint.get(3));
        canvas.drawCircle(50, 450, 20, paint.get(4));
        canvas.drawCircle(50, 550, 20, paint.get(5)); //for example I want to draw 5 circle 
    }
}

我想了解從 View 訪問 ArrayList 的內容。 我正在使用 kmeans.kume_1.get(0) 訪問 kume_1,但它並沒有返回我首先在 KMeans.java 中添加的相同內容。 如何訪問在 KMeans 類中添加的 kume_1 相同項目。

謝謝你。

當 kume_1 是私有的時,如何從 MyView 獲取 Kmeans.kume_1 ?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM