Android View или активность? - PullRequest
1 голос
/ 03 августа 2011

У меня есть класс Java, который я обсуждаю, что я должен сделать для моего приложения для Android.Я не уверен, должен ли я сделать это Activity, View или и то, и другое.

Причина, по которой я не уверен, связана с тем, что у него есть конструкторы с параметрами, слушатель компонента и рисование на холсте.,

Чтобы было ясно, при попытке сделать это View, у меня были проблемы с конструктором.Если деятельность, я не уверен, как взаимодействовать между ними (т.е. изменение размера компонента, изменение цвета и т. Д.) - возможно, с Intents?Поэтому, по логике, возможно, лучший способ - это сочетание вида и действия.Я довольно новичок в этом мышлении, поэтому, пожалуйста, имейте это в виду.

Мне интересно, как те, кто создал несколько приложений для Android, решают, какими должны быть ваши предыдущие классы Java.Мой класс кажется, что он может пойти в любую сторону.

Ниже приведена часть моего класса (в Java, но я также преобразовал его в Android):

public class GraphDisplay extends JPanel implement Serializable {

    public static final int BLUE_RED            = 0;
    public static final int BLACK_WHITE         = 1;

    protected int displayBoard;
    protected int centerXcoord;
    protected int centerYcoord;

    private GeneralPath circlePath;
    private GeneralPath rectPath;

    private Color triangleColor;
    private Color rectColor; 

    /*
     * Create an instance of GraphDisplay using the default
     *    blue/red display
     */
    public GraphDisplay() {
        this(BLUE_RED, 0);

    }

    /*
     * Create an instance of GraphDisplay using the board value
     *    and index of 0. Throws exception if model isn't a 
     *    prederfined value
     */
    public GraphDisplay(int board) {
        this(model, 0);

    }



    public GraphDisplay(int board, int index) throws IllegalArgumentException {
        if(board == BLUE_RED || board == BLACK_WHITE) {
            displayBoard = board;
            this.index = index;

            if(displayBoard == BLUE_RED) {
                setBackground(Color.blue);
                triangleColor = Color.red;
                rectColor = Color.red;
            } else {
                setBackground(Color.black);
                triangleColor = Color.white;
                rectColor = Color.white;
            }

            compListener = new GraphListener();
            addGraphListener(compListener);

            mListener = new GraphMouseListener();
            addMouseMotionListener(mListener);

            trianglePath = new GeneralPath();
            rectPath   = new GeneralPath();

            setMinimumSize(new Dimension(400, 400));
            setPreferredSize(new Dimension(400,400));   

        } else {
             throw new IllegalArgumentException("Improper model")
        }
    }


    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;

        centerXcoord = getWidth() / 2;
        centerYcoord = getHeight() / 2;

        drawTriangle(g2);
        drawCircle(g2);

    }

    private void drawTriangle(Graphics2D g2) {
        //code for drawing triangle with lines
    }

    private void drawRectangle(Graphics2D g2) {
        //code for drawing circle 
    }

    public void setTriangleColor(Color color) {
        triangleColor = color;
        repaint();
    }

    public Color getTriangleColor() {
        return triangleColor;
    }

    //Omitted other getters/setter for brevity. 
    //The above get/set methods are a variety of what the class entails

    protected class GraphMouseMotionListener extends MouseMotionAdapter {
        public void mouseMoved(MouseEvent me) {
            int x = mouseEvent.getX();
            int y = mouseEvent.getY();

            //if in component display message
        }
    }

    protected class GraphComponentListener extends ComponentsAdapter {
        public void componentResized(ComponentEvent ce) {
            super.componentResized(ce);
        }
    }


}

Так что мой вопрос,Вы бы сделали это Activity, которая опирается на View, View или что-то еще?Если это не слишком большая проблема, не могли бы вы объяснить, почему вы делаете это так, как вы упомянули?(если вы разделите его между Activity и View, приведите краткий пример, он не обязательно должен включать мой класс - просто нужно понять концепцию)

1 Ответ

3 голосов
/ 03 августа 2011

Вы бы использовали Activity, который может использовать представление, которое вы создаете в своем XML-файле, расширив Activity для своего класса, а затем в методе onCreate, который вы говорите setContentView(R.layout.your_view);

например:

Ваш класс активности:

public class YourClass extends Activity {

    private Button exampleButton;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        exampleButton = (Button)findViewById (R.id.myButton);

        exampleButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {   
                Toast.makeText(YourClass.this, "I did something", Toast.LENGTH_SHORT).show();   
            }
        });
    }
}

Ваш просмотр XML:

  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TextView android:layout_width="fill_parent"
                  android:layout_height="wrap_content" 
                  android:text="Hello World" />

        <Button android:id="@+id/myButton"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"/>

    </LinearLayout>

Таким образом, XML - это то место, где вы определяете свое представление, какие компоненты будут в нем, как оно расположено и т. Д.

Тогда класс Activity - это то место, где вы воплощаете свой взгляд в жизнь, добавляете функциональность и так далее. Вы также можете программно добавлять компоненты в ваше представление, но сейчас я не буду вдаваться в подробности.

Затем вы можете посмотреть наложения (некоторые примеры могут быть наложения карты, чтобы увидеть, как они рисуют на холсте в упражнении), чтобы получить идею, а затем применить ее к вашей ситуации. Например: http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/ItemizedOverlay.html

надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...