編集: この問題は文字列連結の不適切な使用が原因であったため、この投稿のタイトルを変更しました。
私はこれを不必要に複雑にしていると確信していますが、intent
で使用するために動的に更新する際に問題が発生していShareActionProvider
ます。
ドキュメンテーションによると、 onClick がこれを処理するので心配する必要はありませんが、ユーザーが をクリックしShareActionProvider
たときにのみ をビルドしたいと考えています。Intent.EXTRA_TEXT
ActionProvider
インテントをインタラクティブに更新したくない理由は、インテントの追加情報を構築するのに約 2000 ミリ秒かかり、ユーザーの作業が比較的速くなり、UI が遅くなるためです。
座って、AsyncTask を使用してバックグラウンドでインテントを構築する方法を理解できると確信していますが、それは少しやり過ぎのようです。
私は他の多くのコールバックを試しましsetOnShareTargetSelectedListener
たonPrepareSubMenu
が、それらはすべてインテントが渡された後に呼び出されているようで、情報が最新になるまでアクション プロバイダーを 2 回押す必要があります。
いくつかのコード; これは、私の意図を構築するために呼び出されます。
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 をクリックしたときに実行され、インテントがアクティビティに送信されるようにすることだけです。
私はこれについて間違った方法で進んでいますか?