从片段中获取数据并将其发送到活动

时间:2017-03-23 22:08:26

标签: android android-activity fragment send

我有一项活动,当我点击工具栏中的按钮时,我想要检索数据(某些编辑文本中的文本):

  public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            break;
        case R.id.mnufragmentOk:

            RETRIEVE EDITTEXT!!

            break;
}

这是我的活动:

public class ViatgeDetallTransportActivity extends AppCompatActivity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transportation);

       Toolbar myToolbar = (Toolbar) findViewById(R.id.tlbMenuTransportation);
       setSupportActionBar(myToolbar);
      getSupportActionBar().setTitle("TravelApp ACtFra");
       getSupportActionBar().setHomeButtonEnabled(true);
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);

            ViatgeDetallTransportFragment fragment = new ViatgeDetallTransportFragment();

            getSupportFragmentManager().beginTransaction()
                    .add(R.id.activity_fragment_transportation,fragment)  
                    .commit();
        }
    }

我的片段类:

public class ViatgeDetallTransportFragment extends Fragment {

    public static final String ARG_ID = "id";

    public ViatgeDetallTransportFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_transportation, container, false);


        return rootView;
    }
}

布局简单:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/layout_fragment_transportation" xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Transportation"
        />

    <EditText
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:id="@+id/edtTitleFragmentTransportation"/>
    <EditText
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:id="@+id/edtDescripcioFragmentTransportation"/>

    <EditText
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:id="@+id/edtTypeFragmentTransportation"/>




</LinearLayout>

在活动中,当我点击工具栏按钮&#34; mnufragmentOk&#34;我想收到编辑文本中的数据,所以我可以创建一个自定义对象。

2 个答案:

答案 0 :(得分:2)

将片段实例保留为Activity

中的全局变量
    public class ViatgeDetallTransportActivity extends AppCompatActivity{
 ViatgeDetallTransportFragment fragment;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transportation);

       Toolbar myToolbar = (Toolbar) findViewById(R.id.tlbMenuTransportation);
       setSupportActionBar(myToolbar);
      getSupportActionBar().setTitle("TravelApp ACtFra");
       getSupportActionBar().setHomeButtonEnabled(true);
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);

 fragment = new ViatgeDetallTransportFragment();

            getSupportFragmentManager().beginTransaction()
                    .add(R.id.activity_fragment_transportation,fragment)  
                    .commit();
        }
  public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            break;
        case R.id.mnufragmentOk:

           String s=fragment.getFirstEditTextData();

            break;
}
    }

在Fragment中使用getFirstEditTextData()方法

答案 1 :(得分:1)

您可以为片段设置TAG:

ViatgeDetallTransportFragment fragment = new ViatgeDetallTransportFragment();
getSupportFragmentManager().beginTransaction()
                .add(R.id.activity_fragment_transportation,fragment, "MyFragment").commit();

然后,当您单击按钮时,您可以找到该实例:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        break;
    case R.id.mnufragmentOk:

        ViatgeDetallTransportFragment fragment = getSupportFragmentManager.findFragmentByTag("MyFragment");

        break;
}

最后,您可以找到TextView并获取它的值:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        break;
            case R.id.mnufragmentOk:

            ViatgeDetallTransportFragment fragment = getSupportFragmentManager.findFragmentByTag("MyFragment");
            EditText editText = (EditText)fragment.getView().findViewById(R.id.my_text_view);
            String string = editText.getText().toString().trim();

        break;
}

加: 不要忘记为EditTexts设置ID:

<EditText
    android:id="@+id/my_edit_text"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:id="@+id/edtTypeFragmentTransportation"/>

您需要在片段的视图创建中引用它们:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_transportation, container, false);

    EditText editText = (EditText)rootView.findViewById(R.id.my_edit_text);

    return rootView;
}