简体   繁体   中英

How to pass value from activity to Tab Fragment using replace Fragment?

I have activity , which I take a value from it and pass it to Tab Fragment .. in the Tab Fragment ,I want to use this value to setText

The Problem is How to take this value to the Tab Fragment ? I always get this Exception java.lang.IllegalArgumentException: No view found for id ....for fragment Tab1 .. How to solve it ?

I used normal Tab activity in android studio and modified this method

homee.java

public Fragment getItem(int position) {
        switch (position){
            case 0:
                Tab1 tab1 =new Tab1();
                return tab1;
            case 1:
                Tab2 tab2 =new Tab2();
                return tab2;
            case 2:
                Tab3 tab3 =new Tab3();
                return tab3;
        }
        return null ;
    }

this is my activity number.java

public class number extends AppCompatActivity {
Button add,save;
TextView num;
int n;
String stringNum;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_number);

    add =  findViewById(R.id.idadd);
    save =  findViewById(R.id.idsave);
    num = findViewById(R.id.idnum);

    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //simple method
            n = Integer.parseInt(num.getText().toString());
            num.setText(++n +"");
        }
    });

    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            stringNum= num.getText().toString(); 
// I want to pass this value to Tab1 Fragment by replaceFragment or by any 
//way
            Bundle bundle = new Bundle();
            bundle.putString("key", stringNum);
            Tab1 myFragment = new Tab1();
            myFragment.setArguments(bundle);


     getSupportFragmentManager().beginTransaction().replace
     (R.id.container,myFragment).commit();
            finish();
        }
    });
}}

this is Tab1 child of Tab activity

public class Tab1 extends Fragment {

Button get,update;
TextView txt;

public Tab1(){}

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

    get = view.findViewById(R.id.idget);
    update = view.findViewById(R.id.idup);
    txt = view.findViewById(R.id.textView);

    get.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent in = new Intent(getContext(), number.class);
            startActivity(in);
        }
    });

    update.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String Number= getArguments().getString("key").toString();
            //here the problem
            txt.setText(Number);
        }
    });

        return view;
        }
    }

activity_homee.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="eg.noname.opo.homee">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/appbar_padding_top"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_weight="1"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        app:title="@string/app_name">

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

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TabItem
            android:id="@+id/tabItem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tab_text_1" />

        <android.support.design.widget.TabItem
            android:id="@+id/tabItem2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tab_text_2" />

        <android.support.design.widget.TabItem
            android:id="@+id/tabItem3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/tab_text_3" />

    </android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

tab1.xml

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

<TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="111dp"
    android:text="TextView"
    android:textAlignment="center"
    android:textSize="30sp" />

<Button
    android:id="@+id/idget"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginTop="88dp"
    android:text="get" />

<Button
    android:id="@+id/idup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="update" />
</LinearLayout>

Edit I solved it by call static method which return this value , but still I should press on Button in Fragment to update the value to the new one , I am trying to find a way to update the value automatically when I pass it from my activity .. any help ?

in activity number.java

  in onCreate method just call
  String Number= getArguments().getString("key").toString();
        //here the problem
        txt.setText(Number)

You just have to pass value while calling Fragment in getItem() method.

public Fragment getItem(int position) {
    switch (position){
        case 0:
              Tab1 tab1= new Tab1();
              Bundle bundle = new Bundle();
              bundle.putString("name", name);
              tab1.setArguments(bundle);
              return tab1;
        case 1:
            Tab2 tab2= new Tab2();
            Bundle bundle = new Bundle();
            bundle.putString("mobile", mobile);
            tab2.setArguments(bundle);
            return tab2;
        case 2:
            Tab3 tab3= new Tab3();
            Bundle bundle = new Bundle();
            bundle.putString("email", email);
            tab3.setArguments(bundle);
            return tab3;
    }
    return null ;
}

You can check it in next fragments simply by:

if( getArguments() != null) {
        name = getArguments().getString("name");

Hope this helps u.

Just pass following bundle with your fragment which one you want to pass data :

Bundle data = new Bundle();//create bundle instance
data.putString("key_value", "String to pass");//put string to pass with key 
fragmentName.setArguments(data);//Set bundle data to fragment

You can retrieve data with following code in next fragment :

 String getArgument = getArguments().getString("data");
 text.setText(getArgument); //set string over textview

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