如何将Fragments的TextView数据作为消息发送

时间:2014-10-22 15:27:40

标签: android

我想通过点击按钮作为短信/社交媒体等发送从TextView对象中获取的数据。目前我只能发送一个静态字符串作为短信。

这是我目前发送数据的方法。

public class MainActivity extends FragmentActivity {
android.app.FragmentManager manager;
ViewPager viewpager;


@Override
protected void onCreate(Bundle savedInstanceState) {

    TextView textView = (TextView) findViewById(R.id.textView1);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // instantiate TextView object
    //TextView textViiew = (TextView) findViewById(R.id.textView1);

    // initialize viewPager
    viewpager = (ViewPager) findViewById(R.id.pager);

    // create object of Adapter class
    PagerAdapter padapter = new org.example.androidsdk.demo.PagerAdapter(getSupportFragmentManager());
    viewpager.setAdapter(padapter);

    manager = getFragmentManager();
}

public void slideBack() {
    Fragment f1 = new Fragment();
    android.app.FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.pager, f1, "X");

    // addToBackStack here
    transaction.addToBackStack(null);

    transaction.commit();
}





    public void implicitSendQuote(View v) {
        String text = ((textView)v).getText().toString();
        Intent intent = new Intent(android.content.Intent.ACTION_SEND);
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra("sms_body", "TEXT");  //  -   I want to add data from TextView here
//      intent.putExtra(Intent.EXTRA_STREAM, R.id.textView1);
//      intent.putExtra("sms_body", R.id.textView1); 
//      intent.putExtra(Intent.EXTRA_STREAM, R.layout.fragment_one_layout);
        intent.setType("*/*");
        startActivity(intent);
    }

3 个答案:

答案 0 :(得分:1)

implicitSendQuote将传递给按钮的视图,该按钮将其称为onClick上定义的XML。要从TextView获取文本,您可能希望在onCreate()中找到textView时使textView成为成员变量而不是局部变量。然后,从你的onClick中获取文本,如下所示:

public class MainActivity extends FragmentActivity {
android.app.FragmentManager manager;
ViewPager viewpager;
TextView textView;//textView should be a member variable so you can access it later.


@Override
protected void onCreate(Bundle savedInstanceState) {

    textView = (TextView) findViewById(R.id.textView1); //find textView
...
}

public void implicitSendQuote(View v) {
        String text = textView.getText().toString(); //get value of textView when button is clicked.
...
intent.putExtra("sms_body", text);
...
}

然后,您可以通过getIntent().getStringExtra("sms_body");

在下一个活动中获取此文字

顺便提一下,最好将此字符串键作为其中一个活动的静态成员,即:

public class NextActivity extends FragmentActivity {
     public static final String SMS_BODY = "sms_body";

     protected void onCreate(Bundle b) {
          String text = getIntent().getStringExtra(SMS_BODY);
     }
}

在onImplicitSendQuote:

intent.putExtra(NextActivity.SMS_BODY, text);

这样,您只在一个地方定义字符串,因此如果您稍后更改它,它将不会在活动之间变得不兼容。

答案 1 :(得分:0)

替换:

String text = textView.getText().toString();

使用:

String text = ((TextView)v).getText().toString());

<强>更新

问题是缺少演员。

通过ID获取TextView

String text = (String) ((TextView) getView().findViewById(R.id.yourTextView)).getText();

或@emersso说,使用属性存储您的文字TextView

答案 2 :(得分:0)

这一行试图将Button转换为TextView,这不是你想要的。

String text = ((textView)v).getText().toString();

将其更改为此,将按ID查找TextView,然后将文本作为字符串获取:

String text = ((TextView) findViewById(R.id.textView1)).getText().toString();

并将文字发送到您的意图:

intent.putExtra("sms_body", text);