Как сделать объект доступным для всех действий в программе Android? - PullRequest
6 голосов
/ 18 января 2012

У меня есть приложение, которое состоит из двух действий / экранов и Java-класса, из которого я создаю объекты.

Мне нужно использовать объект, который я создал в первом действии (создание экземпляра класса .java) навторое занятие.

Какой самый простой способ сделать это?Я гуглил об этом, и реализация интерфейса Parcelable в классе java, кажется, является наиболее распространенным ответом на эту проблему.Но объект довольно сложный, и разделение каждого его элемента на первый взгляд похоже на грубое решение.

Нет ли элегантного решения для этого?

Спасибо

РЕДАКТИРОВАТЬ: Хранение данных объекта в простой базе данных SQlite является решением?

Ответы [ 4 ]

3 голосов
/ 18 января 2012

Вы можете использовать контекст приложения (хотя в основном он хранит глобальное состояние, поэтому вам нужно быть осторожным с его использованием):

Использование контекста приложения везде?

1 голос
/ 18 января 2012

Один из самых простых способов передачи информации между действиями - использовать Связки .

Вы можете добавить дополнительные к намерению перед запуском нового действия.

На другом конце (другое действие) вы можете получить эти дополнения из Пакета и, возможно, перестроить Объект в новом действии.

Вот пример:

Прежде всего, вот ученический класс:

Студенческий класс - Student.java:

package com.stephendiniz.objectsharing;

public class Student 
{
    int id;
    String name;
    String profession;

    Student()
    {
        id = 0;
        name = "";
        profession = "";
    }

    Student(int id, String name, String profession)
    {
        this.id = id;
        this.name = name;
        this.profession = profession;
    }

    public int getId()              { return id; }
    public String getName()         { return name; }
    public String getProfession()   { return profession; }
}

Основная деятельность будет ссылаться на класс Student для создания объекта s

Основная активность - AndroidObjectSharing.java:

package com.stephendiniz.objectsharing;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class AndroidObjectSharingActivity extends Activity
{
    TextView id;
    TextView name;
    TextView profession;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        id = (TextView)findViewById(R.id.id);
        name = (TextView)findViewById(R.id.name);
        profession = (TextView)findViewById(R.id.profession);

        Button submitButton = (Button)findViewById(R.id.submitButton);
        submitButton.setOnClickListener(new View.OnClickListener()
            {
            final Intent newActivity = new Intent(AndroidObjectSharingActivity.this, NewActivity.class);
                public void onClick(View v)
                {
                    Student s = new Student(Integer.parseInt(id.getText().toString()), name.getText().toString(), profession.getText().toString());
                    newActivity.putExtra("extraStudentId", s.getId());
                    newActivity.putExtra("extraStudentName", s.getName());
                    newActivity.putExtra("extraStudentProfession", s.getProfession());

                    startActivity(newActivity);
                }
            });
    }
}

Вот XML, связанный с классом ученика:

Основной макет XML - main.xml:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Student ID:" />
    <EditText
        android:id="@+id/id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="9001" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Student Name:" />
    <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Steve" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Student Profession:" />
    <EditText
        android:id="@+id/profession"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Computer Engineer" />

    <Button
        android:id="@+id/submitButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        android:text="Send to New Activity" />

</LinearLayout>

Обратите внимание, что NewActivity обращается к информации из Bundle (в данном случае с именем infoBundle ) ..

Объект " перестроен " программно, как если бы он был передан.

Новая активность - NewActivity.java:

package com.stephendiniz.objectsharing;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class NewActivity extends Activity
{
        LinearLayout ll;

        TextView id;
        TextView name;
        TextView profession;

        private final static String TAG = "NewActivity";
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        Bundle infoBundle = getIntent().getExtras();
        Student s = new Student(infoBundle.getInt("extraStudentId"), infoBundle.getString("extraStudentName"), infoBundle.getString("extraStudentProfession"));

        ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);

        id = new TextView(this);
        name = new TextView(this);
        profession = new TextView(this);

        id.setText("Student Id: " + s.getId() + "\n");
        name.setText("Student Name: " + s.getName() + "\n");
        profession.setText("Student Profession: " + s.getProfession() + "\n");

        ll.addView(id);
        ll.addView(name);
        ll.addView(profession);

        Button closeButton = new Button(this);
        closeButton.setText("Close Activity");
        closeButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    finish();
                }
            });

        ll.addView(closeButton);

        setContentView(ll);
    }
}

Не забудьте добавить новое действие в свой манифест!

Манифест Android - AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.stephendiniz.objectsharing"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".AndroidObjectSharingActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".NewActivity"
            android:label="New Activity" />
    </application>

</manifest>

Извините за сочетание XML и программных сценариев, я понял после первого занятия, что будет много файлов для отображения, поэтому я сжал последний файл, но вы должны быть в состоянии понять идею.

Надеюсь, это поможет!

0 голосов
/ 29 марта 2019
class Bike{
private static int id;
public static int getId() 
{
    return id;
}
public static void setId(int id) 
{
    Bike.id = id;
}
public static String getName() 
{
    return name;
}

public static void setName(String name)
{
    Bike.name = name;
}
private static String name;

 }


 class Honda4 {

 public static void main(String args[]){

     Bike.setName("Duraivel");
     Bike.setId(1);
     GetValue g = new GetValue();

 }
 }

 class GetValue
 {
     {
         System.out.print("Bike Name"+ Bike.getName());
         System.out.print("Bike ID "+ Bike.getId()); 
     }
 }
0 голосов
/ 15 мая 2013

Я думаю, что Singleton - это правильный способ создать объект, доступный во всех видах деятельности.Это объект, который может быть создан только один раз, и если вы попытаетесь получить к нему доступ снова, он вернет существующий экземпляр объекта.См. этот ответ для получения дополнительной информации о том, как это работает.

...