编辑: 更改了这篇文章的标题,因为问题是由于错误地使用了字符串连接。
我确信我不必要地使这个复杂化,但我在动态更新我intent
以在ShareActionProvider
.
文档说我不需要担心 onClick ,因为它ShareActionProvider
会处理这个问题,但是,我只想Intent.EXTRA_TEXT
在用户单击ActionProvider
.
我不想以交互方式更新意图的原因是因为为意图构建额外信息需要大约 2000 毫秒,并且用户可以相对更快地工作,从而导致 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;
}
我要做的就是buildIntent()
在用户单击 ShareActionProvider 时运行,以便将意图发送到活动。
我只是以错误的方式解决这个问题吗?