简体   繁体   中英

How to pass data from bottom sheet to a fragment in android?

I am trying to pass values from a bottom sheet which contains some TextViews to a fragment. My fragment contains an EditText field and a Floating action button.When the user clicks on the floating action button, the bottom sheet shows up which has a number of TextViews, when the user clicks on any of the textViews on the bottom sheet, the value or the string of that TextView should be displayed in the editText field of the fragment and the bottom sheet should be dismissed.

I have tried implementing the onClickListener inside the setOnShowListener method but it doesn't seem to work.

Here is my code:

Fragment_TextPropert1_EditText.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.sumitroy.TextProperty1_EditText"
    >
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:cardCornerRadius="15dp"
        android:padding="15dp"
        android:layout_below="@+id/view"
        android:layout_marginTop="10dp"
        app:cardUseCompatPadding="true"
        android:id="@+id/view2">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"
            android:hint="Enter Your Comments Here.."
            android:id="@+id/userText"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />

    </android.support.v7.widget.CardView>

<ImageButton
      android:layout_width="65dp"
      android:layout_height="65dp"
      android:id="@+id/example_Ads"
      android:background="@drawable/oval"
      android:layout_alignParentBottom="true"
      android:layout_alignParentEnd="true"
      android:layout_marginBottom="20dp"
      android:layout_marginRight="15dp"
      android:src="@drawable/double_plus"
     />


</RelativeLayout>

TextProperty1_bottomsheet.xml

    <?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

<RelativeLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior">


    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:cardCornerRadius="15dp"
    android:padding="15dp"
    android:layout_marginTop="15dp"
    app:cardUseCompatPadding="true"
    android:id="@+id/view1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Comment1"
        android:id="@+id/example_Ad1"
        android:padding="10dp"
        android:textStyle="bold"
        android:textSize="14sp"
        android:layout_below="@+id/view"
        android:layout_alignParentStart="true" />

</android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:cardCornerRadius="15dp"
        android:padding="15dp"
        android:layout_marginTop="10dp"
        app:cardUseCompatPadding="true"
        android:layout_below="@+id/view1"
        android:id="@+id/view2">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Comment 2"
            android:id="@+id/example_Ad2"
            android:padding="10dp"
            android:textStyle="bold"
            android:textSize="14sp"
            android:layout_below="@+id/view"
             />

    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:cardCornerRadius="15dp"
        android:padding="15dp"
        android:layout_marginTop="15dp"
        app:cardUseCompatPadding="true"
        android:id="@+id/view3"
        android:layout_below="@+id/view2">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Comment 3 "
            android:id="@+id/example_Ad3"
            android:padding="10dp"
            android:textStyle="bold"
            android:textSize="14sp"
            android:layout_below="@+id/view"
            />

    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:cardCornerRadius="15dp"
        android:padding="15dp"
        android:layout_marginTop="15dp"
        app:cardUseCompatPadding="true"
        android:id="@+id/view4"
        android:layout_below="@+id/view3">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Comment 4 "
            android:id="@+id/example_Ad4"
            android:padding="10dp"
            android:textStyle="bold"
            android:textSize="14sp"
            android:layout_below="@+id/view"
             />

    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:cardCornerRadius="15dp"
        android:padding="15dp"
        android:layout_marginTop="15dp"
        app:cardUseCompatPadding="true"
        android:id="@+id/view5"
        android:layout_below="@+id/view4">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Comment 5 "
            android:id="@+id/example_Ad5"
            android:padding="10dp"
            android:textStyle="bold"
            android:textSize="14sp"
            android:layout_below="@+id/view"
             />

    </android.support.v7.widget.CardView>


</RelativeLayout>
</ScrollView>

TextProperty1_EditText.java

import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialog;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;


/**
 * A simple {@link Fragment} subclass.
 */
public class TextProperty1_EditText extends Fragment {

    View bottomSheetView;
    EditText editText1;
    TextView t1;
    BottomSheetDialog bottomSheetDialog;
    BottomSheetBehavior bottomSheetBehavior;
    ImageButton floatButton;
    RelativeLayout backgroundLayout;


    public TextProperty1_EditText() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        final View rootview= inflater.inflate(R.layout.fragment_text_property1__edit_text, container, false);
        editText1=(EditText) rootview.findViewById(R.id.userText);
        floatButton=(ImageButton)rootview.findViewById(R.id.example_Ads);
        floatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Toast.makeText(v.getContext(),"Floating Button Works",Toast.LENGTH_SHORT).show();
                bottomSheetView=getActivity().getLayoutInflater().inflate(R.layout.textproperty1_bottomsheet,null);
                bottomSheetDialog=new BottomSheetDialog(rootview.getContext());
                bottomSheetDialog.setContentView(bottomSheetView);
                bottomSheetBehavior=BottomSheetBehavior.from((View) bottomSheetView.getParent());
                bottomSheetDialog.show();

                bottomSheetDialog.setOnShowListener(new DialogInterface.OnShowListener() {
                    @Override
                    public void onShow(DialogInterface dialog) {
                       t1=(TextView)bottomSheetView.findViewById(R.id.example_Ad1);
                        t1.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                String take1=t1.getText().toString();
                                //Toast.makeText(bottomSheetView.getContext(),"Floating Button Works",Toast.LENGTH_SHORT).show();
                                editText1.setText(take1);
                                bottomSheetDialog.dismiss();
                            }
                        });



                    }
                });
                bottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialog) {

                    }
                });

                bottomSheetDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
                    @Override
                    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                        //Toast.makeText(bottomSheetView.getContext(),"Floating Button Works",Toast.LENGTH_SHORT).show();
                        return false;
                    }
                });

            }
        });


        return rootview;
    }

}

As a simple solution you may use LocalBroadcastManager .

public static final String SOME_INTENT_FILTER_NAME = "SOME_INTENT_FILTER_NAME";

In your fragment:

private BroadcastReceiver someBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        //TODO extract extras from intent
    }
};
@Override
public void onResume() {
    super.onResume();
    LocalBroadcastManager.getInstance(getContext()).registerReceiver(someBroadcastReceiver,
            new IntentFilter(SOME_INTENT_FILTER_NAME));
}
@Override
public void onPause() {
    LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(someBroadcastReceiver);
    super.onPause();
}

In your bottomsheet:

Intent someIntent = new Intent(SOME_INTENT_FILTER_NAME);
//TODO put extras to your intent
LocalBroadcastManager.getInstance(context).sendBroadcast(someIntent);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM