3

Я хочу поделиться динамическим текстом с помощью ShareActionProvider. Я использую этот код в моем фрагменте:Как поделиться динамическим текстом в android ShareActionProvider

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.detailfragment, menu); 
    MenuItem menuItem = menu.findItem(R.id.action_share); 

    private ShareActionProvider mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem); 

    if (mForecast != null) { 
      mShareActionProvider.setShareIntent(createShareForecastIntent()); 
     } 
} 

private Intent createShareForecastIntent() { 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
    shareIntent.setType("text/plain"); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString()); 
    return shareIntent; 
} 

Это разделит текст, который был перед входом в активности, даже если я изменю его в EditText перед нажатием кнопки акций. И этот код работает, как я хочу, но я не хочу, чтобы сделать отдельную кнопку для совместного использования:

@Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.button: 
       Intent myIntent = new Intent(); 
       myIntent.setAction(Intent.ACTION_SEND); 
       myIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString()); 
       myIntent.setType("text/plain"); 
       startActivity(myIntent); 
       break; 
     default: 
       // 
    } 
} 

Я использую:

minSdkVersion 14 
targetSdkVersion 19 
+0

Попробуйте установить намерение Share в свой метод onOptionsItemSelected –

+2

не работает; ( –

ответ

0

обновленный shareIntent когда текст изменения, используя TextWatcher. This sample project обладает активностью, которая делает именно то, что вы описали:

/*** 
    Copyright (c) 2012 CommonsWare, LLC 
    Licensed under the Apache License, Version 2.0 (the "License"); you may not 
    use this file except in compliance with the License. You may obtain a copy 
    of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required 
    by applicable law or agreed to in writing, software distributed under the 
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
    OF ANY KIND, either express or implied. See the License for the specific 
    language governing permissions and limitations under the License. 

    From _The Busy Coder's Guide to Android Development_ 
    http://commonsware.com/Android 
*/ 

package com.commonsware.android.sap; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.Menu; 
import android.widget.EditText; 
import android.widget.ShareActionProvider; 
import android.widget.Toast; 

public class MainActivity extends Activity implements 
    ShareActionProvider.OnShareTargetSelectedListener, TextWatcher { 
    private ShareActionProvider share=null; 
    private Intent shareIntent=new Intent(Intent.ACTION_SEND); 
    private EditText editor=null; 

    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_main); 

    shareIntent.setType("text/plain"); 
    editor=(EditText)findViewById(R.id.editor); 
    editor.addTextChangedListener(this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.actions, menu); 

    share= 
     (ShareActionProvider)menu.findItem(R.id.share) 
           .getActionProvider(); 
    share.setOnShareTargetSelectedListener(this); 

    return(super.onCreateOptionsMenu(menu)); 
    } 

    @Override 
    public boolean onShareTargetSelected(ShareActionProvider source, 
             Intent intent) { 
    Toast.makeText(this, intent.getComponent().toString(), 
        Toast.LENGTH_LONG).show(); 

    return(false); 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    shareIntent.putExtra(Intent.EXTRA_TEXT, s.toString()); 
    share.setShareIntent(shareIntent); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
           int after) { 
    // ignored 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
          int count) { 
    // ignored 
    } 
} 

Обратите внимание, что я не уверен, что если setShareIntent() вызова необходимо при каждом изменении текста; Я не пытался удалить это и просто обновлять дополнительные.

+2

Мне нужно обмениваться текстом из 2 разных текстовых просмотров, континурованных одной строкой, и я установил текст с помощью метода setText, но, как я понял, TextWatcher не принять его как измененный, есть ли еще решения? –

Смежные вопросы