Update fragment from activity

2019-06-06 02:52发布

I do not understand how can I transfer data from fragmentactivity to fragment, i have:

MainScreen.class

public class MainScreen extends FragmentActivity {
CollectionPagerAdapter mCollectionPagerAdapter;
ViewPager mViewPager;

public static String currentCityId;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabs_collection);

    mCollectionPagerAdapter = new CollectionPagerAdapter(getSupportFragmentManager());

    final ActionBar actionBar = getActionBar();

    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setTitle(getString(R.string.app_name));
    actionBar.setIcon(R.drawable.device_access_brightness_high);

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mCollectionPagerAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mainmenu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_refresh:
            Log.w("Refresh", "refresh");

            break;
        case R.id.action_options:

            break;
        case R.id.submenu_about:

            break;
        case R.id.submenu_help:

            break;
        case R.id.submenu_buy:

            break;
        case R.id.submenu_settings:

            break;
        case R.id.submenu_share:

            break;
        default:
            break;
    }

    return true;
}

public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
    FragmentManager fm;

    public CollectionPagerAdapter(FragmentManager fm) {
        super(fm);
        this.fm = fm;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new FragmentDay();
            case 1:
                return new FragmentHour();
            case 2:
                return new FragmentDaily();
            default:
                return new FragmentDay();
        }
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return getString(R.string.tab_day);
            case 1:
                return getString(R.string.tab_hour);
            case 2:
                return getString(R.string.tab_daily);
            default:
                return getString(R.string.tab_day);
        }
    }
}

FragmentDay.class

public class FragmentDay extends Fragment {
TextView currentTemp;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.hour_screen, container, false);
    Bundle args = getArguments();
    currentTemp = (TextView)rootView.findViewById(R.id.day_current_temp);
    return rootView;
}

}

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:background="@drawable/bk_new">

<android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <android.support.v4.view.PagerTitleStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="#33b5e5"
            android:textColor="#fff"
            android:paddingTop="4dp"
            android:paddingBottom="4dp"/>
</android.support.v4.view.ViewPager>

and fragment.xml:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dayScreen"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bk_new">

<TextView
        android:id="@+id/day_current_temp"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="22 C"
        android:textColor="#FFFFFF"
        android:textSize="38dp"
        android:layout_marginTop="270dp"/>

Read these articles (ViewPager Activity to notify a Fragment of a specific event, Updating fragments from Activity in a ViewPager, ViewPager - Update fragment from activity) and do not understand what to do! I will be very grateful for the help!

1条回答
趁早两清
2楼-- · 2019-06-06 03:32

When you say "transfer data" I'm assuming you mean variables so you can tweak your fragment in whichever way.

You can access the activity object at any time within the fragment using getActivity() method and cast it to your Activity implementation...

// Code in the fragment
((MainScreen) getActivity()).getSomeDataFromActivity()

There is an article here also by Google which describes patterns of communication between Fragment and Activity.

查看更多
登录 后发表回答