第一个,抱歉我的英语不好。我正在开发交互式应用程序,可以从另一个应用程序更新应用程序中的视图(UI)。 你能告诉我如何将应用程序中的视图/布局共享到另一个应用程序吗? 请任何建议。 谢谢!!!
答案 0 :(得分:0)
我不明白你想要做什么,我假设您想要在点击App A中的Button后启动App B,并为App B提供某种信息。这样做对Intents来说没有问题。我真的不知道你要发送什么样的数据,但由于看起来数据有点复杂,我将在这个例子中发送一个可序列化的对象,但你可以发送几乎任何类型的数据。有关更详细的文档,请参阅Android Intents on Intents: http://developer.android.com/reference/android/content/Intent.html
首先,您要发送的对象需要实现Serializable:
public class DataContainer implements Serializable {
...
}
这是来自App A的OnClickListener,它启动了App B:
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);
}
});
在AppB的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");
}
}
在这个例子中,我使用String“Data”作为标记将对象附加到Intent。永远不要在真实的应用程序中像这样硬编码字符串。你应该为此目的定义一个常量。
修改强>
如果您想发送布局,我只需发送资源ID,如下所示:
在App A中:
int resId = R.layout.layout_to_send;
intent.putExtra("layout", resId);
在App 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,
...
}
将其添加到App A中的意图:
intent.putExtra("action", Action.SHOW_VIEW_A);
在App 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) {
...
}