Android 在应用程序之间共享视图
首先,对不起我的英语不好。我正在开发交互式应用程序,可以从另一个应用程序更新应用程序中的视图(UI)。 您能告诉我如何将视图/布局从一个应用程序共享到另一个应用程序吗? 请提出任何建议。Android 在应用程序之间共享视图,android,layout,view,share,interactive,Android,Layout,View,Share,Interactive,首先,对不起我的英语不好。我正在开发交互式应用程序,可以从另一个应用程序更新应用程序中的视图(UI)。 您能告诉我如何将视图/布局从一个应用程序共享到另一个应用程序吗? 请提出任何建议。 谢谢 我不太明白您到底想做什么,我假设您想在点击应用程序a中的按钮后启动应用程序B,并向应用程序B提供某种信息。这样做与意图无关。我真的不知道您要发送什么样的数据,但由于数据似乎有点复杂,因此在本例中我将发送一个可序列化对象,但您几乎可以发送任何类型的数据。有关更详细的文档,请参阅Android意向指南: 首
谢谢 我不太明白您到底想做什么,我假设您想在点击应用程序a中的按钮后启动应用程序B,并向应用程序B提供某种信息。这样做与意图无关。我真的不知道您要发送什么样的数据,但由于数据似乎有点复杂,因此在本例中我将发送一个可序列化对象,但您几乎可以发送任何类型的数据。有关更详细的文档,请参阅Android意向指南: 首先,要发送的对象需要实现可序列化:
public class DataContainer implements Serializable {
...
}
以下是从应用程序A启动应用程序B的OnClickListener:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Context context = getApplicationContext();
// The Object you are trying to send
DataContainer container = getData();
// Create the Intent to start the other App
Uri webpage = Uri.parse("http://www.android.com");
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
// Add the object to the Intent. With the String "Data" you can later retrieve the Object in the other App
intent.putExtra("Data", container);
// Start the other App
context.startActivity(intent);
}
});
在应用程序B的onCreate方法的主要活动中,您可以检索对象:
@Override
protected void onCreate (Bundle savedInstanceState) {
// This means you only retrieve the data on the first start of the App, not after an orientation change etc.
if(savedInstanceState == null) {
// Get the Intent the App was started with.
Intent intent = getIntent();
// Retrieve the Object you wanted to send to this App.
DataContainer data = (DataContainer) intent.getSerializableExtra("Data");
}
}
在本例中,我使用字符串“Data”作为标记将对象附加到意图。永远不要在真正的应用程序中硬编码这样的字符串。您应该为此定义一个常量
编辑:
如果要发送布局,我只需发送ressource id,如下所示:
在应用程序A中:
int resId = R.layout.layout_to_send;
intent.putExtra("layout", resId);
在应用程序B中:
int resId = intent.getIntExtra("layout", -1);
...
if(resId >= 0) {
View view = layoutInflater.inflate(resId, parent, false);
...
}
无论如何,我不建议这样做。如果你这样做,你会将信息发送到另一个与此应用程序无关的应用程序,而该应用程序在设计上应该相互独立。考虑一下这样的事情:
使用其他应用程序应该执行的所有可能操作创建枚举
public enum Action {
SHOW_VIEW_A,
SHOW_VIEW_B,
...
}
将其添加到应用程序A中的意图:
intent.putExtra("action", Action.SHOW_VIEW_A);
在应用程序B中,对每种可能的情况作出反应
Action action = intent.getSerializableExtra("action");
View view = null;
switch(action) {
case SHOW_VIEW_A:
view = layoutInflater.inflate(R.layout.view_a, parent, false);
break;
case SHOW_VIEW_B:
view = layoutInflater.inflate(R.layout.view_b, parent, false);
break;
default:
break;
}
if(view != null) {
...
}
请解释一下你的需求示例:我有两个应用程序:A和B。我点击应用程序A上的按钮,它会向B发送广播,表示B更新视图(取决于A发送B的数据)。现在我使用json进行传输,但它太长,而且不清楚。另一种方式?好的,如果我理解你的要求,你的设备上运行着应用程序a,当你点击应用程序a中的任何按钮时,你想让应用程序b启动,不是吗?因为即使你将任何东西更新到应用程序b,它在应用程序b启动之前都不会可见?谢谢你的回复。我的意思是,应用程序a向应用程序b发送数据(json、视图、任何…),和应用程序B更新视图(例如:显示1个问题和4个可选答案)以及该数据。我不想使用json。所以,你有没有什么快速的方法来传输和更新应用程序B上的视图。我编辑了我的答案,以包括关于发送布局的建议。Sr,我没有清楚地解释我的问题。我可以发送版面吗?是的,如果应用程序B已经包含版面,你只需要发送资源id。我会相应地编辑我的问题。非常感谢。我会在你的路上试一试,并告诉你结果。