我有一个应用程序,它包含两个活动/屏幕和一个java类,我可以从中创建对象。
我需要在第二个活动上使用我在第一个活动(实例化.java类)上创建的对象。
最简单的方法是什么?我搜索了它并在java类上实现Parcelable接口似乎是这个问题最常见的答案。但是这个对象有点复杂,它的每一个成员似乎都是一个蛮力的解决方案。
这不是一个优雅的解决方案吗?
由于
编辑:将对象数据存储在简单的SQlite数据库上是一种解决方案吗?
答案 0 :(得分:3)
您可以使用应用程序上下文(尽管这基本上是存储全局状态,因此您需要小心如何使用它):
答案 1 :(得分:1)
在活动之间传递信息的最简单方法之一是使用捆绑。
您可以在启动新活动之前将 extras 添加到Intent。
在另一端(另一个活动),您可以从Bundle中接收这些 extras ,并可能在新活动中重建Object ..
这是一个例子:
首先,这是学生班:
学生班 - 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访问来自捆绑的信息(在本例中名为 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 Manifest - 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和Programmatic Scripting的混合,很抱歉,我在第一个Activity之后意识到要显示很多文件所以我压缩了最后一个文件,但是你应该能够得到这个想法..
希望这有帮助!
答案 2 :(得分:0)
我认为Singleton是创建可在所有活动中访问的对象的正确方法。它是一种只能创建一次的对象,如果你再次尝试访问它,它将返回该对象的现有实例。有关其工作原理的详情,请参阅this答案。
答案 3 :(得分:0)
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());
}
}