【发布时间】:2013-06-17 21:33:03
【问题描述】:
编辑: 更改了这篇文章的标题,因为问题是由于错误地使用了字符串连接。
我确信我不必要地使这复杂化,但我在动态更新我的 intent 以在 ShareActionProvider 中使用时遇到问题。
文档说我不需要担心 onClick,因为 ShareActionProvider 会处理这个问题,但是,我只想在用户单击 ActionProvider 时构建 Intent.EXTRA_TEXT。
我不想以交互方式更新 Intent 的原因是因为它需要大约 2000 毫秒来构建 Intent 的额外信息,并且用户可以相对更快地工作导致 UI 变得迟缓。
我确信我可以坐下来弄清楚如何使用 AsyncTask 在后台构建 Intent,但这似乎有点矫枉过正。
我已经尝试过setOnShareTargetSelectedListener和onPrepareSubMenu以及其他一些回调,但它们似乎都是在传递意图后调用的,并且在信息更新之前需要按两次 Action Provider .
一些代码;这被称为构建我的意图:
public void buildIntent(){
if (mShareIntent == null)
return;
mShareIntent.putExtra(Intent.EXTRA_SUBJECT, "Start:" + mAddressArray.get(0) + " Span:" + (mAddressArray.get(1)-mAddressArray.get(0)));
buildHTML bh = new buildHTML(mAddressArray, mBitArray);
mShareIntent.putExtra(Intent.EXTRA_TEXT, bh.getText());
//mShareIntent.putExtra(Intent.EXTRA_HTML_TEXT, bh.getHTML());
mShareActionProvider.setShareIntent(mShareIntent);
}
让一切变慢的是bh.getText();
public class buildHTML {
private ArrayList<Integer> mAddress;
private ArrayList<String> mBits;
buildHTML(ArrayList<Integer> address, ArrayList<String> bits){
mAddress = address;
mBits = bits;
}
public String getText(){
String str;
str = "DMX : ADDRESS \n";
str += "--- : ---------\n";
int count = mAddress.size();
for (int i = 0; i < count ; i++) //takes up to 3000ms to run
str += String.format("%03d : %s\n", mAddress.get(i), mBits.get(i));
return str;
}
我要做的就是在用户单击 ShareActionProvider 时运行buildIntent(),以便将意图发送到活动。
我是不是走错路了?
【问题讨论】:
标签: java android android-intent stringbuilder string-concatenation