MainActivityから別のアクティビティへの変数のタブフラグメントへの受け渡し

セバスチャン

MainActivityに、StoriesActivityに正常に渡した変数があります。

問題は、そこからタブであるStoriesFragmentに移動することですTabLayout

インテントとバンドルについては理解していますが、この場合にどのように機能するかわかりません。

これはStoriesActivityです:

public class StoriesActivity extends AppCompatActivity {

    //This is our tablayout
    private TabLayout tabLayout;

    //This is our viewPager
    private ViewPager viewPager;

    private Toolbar toolbar;

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

        /* +++ START Intent +++ */
        Bundle extras = getIntent().getExtras();

        final int authorID = extras.getInt("author_id");
        final String authorName = extras.getString("author_name");
        Log.i("click", Integer.toString(authorID));
        // this is successful
        /* +++ END Intent +++ */

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle(authorName);
        setSupportActionBar(toolbar);

        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new StoriesFragment(), "Stories");
        adapter.addFragment(new CollectionsFragment(), "Collections");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

そしてこれはStoriesFragmentです(authorIDStoriesActivityから変数にアクセスしていないため、現時点では機能しません):

public class StoriesFragment extends Fragment {

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

    private ListView storiesListView;

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

        // link ListView object with XML ListView
        storiesListView = (ListView) findViewById(R.id.stories_list_view);

        // create new instance of DatabaseHelper
        DatabaseHelper db = new DatabaseHelper(this);

        // create list of stories through getAllStories method
        List<Book> storyList = db.getAllStories(authorID);

        // create new ArrayAdapter
        ArrayAdapter<Book> arrayAdapter =
                new ArrayAdapter<Book>(this, android.R.layout.simple_list_item_1, storyList);

        // link ListView and ArrayAdapter
        storiesListView.setAdapter(arrayAdapter);

        Log.i("test", storyList.toString());

        storiesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Book story = (Book) storiesListView.getItemAtPosition(i);
                //Log.i("click", story);

                Intent intent = new Intent(StoriesActivity.this, StoryBodyActivity.class);
                intent.putExtra("story", story.getTitle());
                startActivity(intent);

                //Log.i("click", "That's a click!");
            }
        });

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_stories, container, false);
    }

}

StoriesTabsAdapter:

public class StoriesTabsAdapter extends FragmentPagerAdapter {

    int mNumOfTabs;


    public StoriesTabsAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    private String[] tabTitles = new String[]{"Stories", "Collections"};

    // overriding getPageTitle()
    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles[position];
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                StoriesFragment tab1 = new StoriesFragment();
                return tab1;
            case 1:
                CollectionsFragment tab2 = new CollectionsFragment();
                return tab2;
            default:
                return null;
        }

    }

    @Override
    public int getCount() {
        return tabTitles.length;
    }

}
Ibrokhim Kholmatov

これがあなたの問題の解決策です:

これはあなたの活動です:

public class StoriesActivity extends AppCompatActivity {

    //This is our tablayout
    private TabLayout tabLayout;

    //This is our viewPager
    private ViewPager viewPager;

    private Toolbar toolbar;

    private int authorID;
    private String authorName;

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

        /* +++ START Intent +++ */
        Bundle extras = getIntent().getExtras();

        authorID = extras.getInt("author_id");
        authorName = extras.getString("author_name");
        Log.i("click", Integer.toString(authorID));
        // this is successful
        /* +++ END Intent +++ */

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle(authorName);
        setSupportActionBar(toolbar);

        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(StoriesFragment.newInstance(authorID, authorName), "Stories");
        adapter.addFragment(new CollectionsFragment(), "Collections");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

これはあなたの断片です:

public class StoriesFragment extends Fragment {

    private int authorID;
    private String authorName;

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

    public static StoriesFragment newInstance(int authorID, String authorName) {

        Bundle args = new Bundle();
        args.putInt("author_id", authorID);
        args.putString("author_name", authorName);

        StoriesFragment fragment = new StoriesFragment();
        fragment.setArguments(args);
        return fragment;
    }

    private ListView storiesListView;

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

        // Here is your arguments
        authorID = getArguments().getInt("author_id");
        authorName = getArguments().getString("author_name");

        // link ListView object with XML ListView
        storiesListView = (ListView) findViewById(R.id.stories_list_view);

        // create new instance of DatabaseHelper
        DatabaseHelper db = new DatabaseHelper(this);

        // create list of stories through getAllStories method
        List<Book> storyList = db.getAllStories(authorID);

        // create new ArrayAdapter
        ArrayAdapter<Book> arrayAdapter =
                new ArrayAdapter<Book>(this, android.R.layout.simple_list_item_1, storyList);

        // link ListView and ArrayAdapter
        storiesListView.setAdapter(arrayAdapter);

        Log.i("test", storyList.toString());

        storiesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Book story = (Book) storiesListView.getItemAtPosition(i);
                //Log.i("click", story);

                Intent intent = new Intent(StoriesActivity.this, StoryBodyActivity.class);
                intent.putExtra("story", story.getTitle());
                startActivity(intent);

                //Log.i("click", "That's a click!");
            }
        });

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_stories, container, false);
    }

}

それがあなたを助けることを願っています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

アクティビティから別のアクティビティフラグメントへのパラメータの受け渡し

分類Dev

フラグメントからアクティビティへのオブジェクトの受け渡し

分類Dev

フラグメントからアクティビティへの `SharedPreferences`データの受け渡し

分類Dev

アクティビティBからアクティビティAフラグメントへのデータの受け渡し

分類Dev

アクティビティからフラグメントへの値の受け渡し

分類Dev

アクティビティからフラグメントへの値の受け渡し

分類Dev

アクティビティからフラグメントへのオブジェクトの受け渡しは参照渡しです

分類Dev

あるアクティビティのフラグメントから別のアクティビティへのバンドル(オブジェクト)自体全体の受け渡し

分類Dev

Androidのアクティビティからフラグメントへのデータの受け渡しが機能していません

分類Dev

アクティビティからスワイプ可能なビューフラグメントへのデータの受け渡し

分類Dev

リストフラグメントから新しいアクティビティへのデータの受け渡し

分類Dev

ViewPagerを使用したアクティビティからフラグメントへのデータの受け渡し

分類Dev

クラスキャスト例外を与える(フラグメントからアクティビティにアクセスすることによる)アクティビティからフラグメントへのデータの受け渡し

分類Dev

フラグメントからアクティビティへのデータの受け渡しは同じではありません

分類Dev

MainActivityからフラグメントへの変数の受け渡し

分類Dev

インテントサービスからアクティビティへのデータの受け渡し

分類Dev

アクティビティからアダプタへの変数の受け渡し

分類Dev

アクティビティからクラスへの変数の受け渡し

分類Dev

コントローラスコープからディレクティブへの変数の受け渡し

分類Dev

ダイアログボックスからアクティビティへのデータの受け渡し

分類Dev

ダイアログボックスからアクティビティへのデータの受け渡し

分類Dev

あるアクティビティから別のアクティビティへの情報の受け渡しの失敗Androidスタジオ

分類Dev

ライフサイクルオブザーバーであるクラスからアクティビティへのデータの受け渡し

分類Dev

MainActivityからフラグメントへのリストの受け渡し

分類Dev

フラグメントからの親アクティビティのデータへのアクセス

分類Dev

ArrayIndexOutOfBoundsException / alertdialogからアクティビティへのarraylistの受け渡し

分類Dev

アダプタークラスからアクティビティクラスへのテキストビュー値の受け渡し

分類Dev

アクティビティからフラグメントへのAndroid

分類Dev

アクティビティからフラグメントへの通信方法は?

Related 関連記事

  1. 1

    アクティビティから別のアクティビティフラグメントへのパラメータの受け渡し

  2. 2

    フラグメントからアクティビティへのオブジェクトの受け渡し

  3. 3

    フラグメントからアクティビティへの `SharedPreferences`データの受け渡し

  4. 4

    アクティビティBからアクティビティAフラグメントへのデータの受け渡し

  5. 5

    アクティビティからフラグメントへの値の受け渡し

  6. 6

    アクティビティからフラグメントへの値の受け渡し

  7. 7

    アクティビティからフラグメントへのオブジェクトの受け渡しは参照渡しです

  8. 8

    あるアクティビティのフラグメントから別のアクティビティへのバンドル(オブジェクト)自体全体の受け渡し

  9. 9

    Androidのアクティビティからフラグメントへのデータの受け渡しが機能していません

  10. 10

    アクティビティからスワイプ可能なビューフラグメントへのデータの受け渡し

  11. 11

    リストフラグメントから新しいアクティビティへのデータの受け渡し

  12. 12

    ViewPagerを使用したアクティビティからフラグメントへのデータの受け渡し

  13. 13

    クラスキャスト例外を与える(フラグメントからアクティビティにアクセスすることによる)アクティビティからフラグメントへのデータの受け渡し

  14. 14

    フラグメントからアクティビティへのデータの受け渡しは同じではありません

  15. 15

    MainActivityからフラグメントへの変数の受け渡し

  16. 16

    インテントサービスからアクティビティへのデータの受け渡し

  17. 17

    アクティビティからアダプタへの変数の受け渡し

  18. 18

    アクティビティからクラスへの変数の受け渡し

  19. 19

    コントローラスコープからディレクティブへの変数の受け渡し

  20. 20

    ダイアログボックスからアクティビティへのデータの受け渡し

  21. 21

    ダイアログボックスからアクティビティへのデータの受け渡し

  22. 22

    あるアクティビティから別のアクティビティへの情報の受け渡しの失敗Androidスタジオ

  23. 23

    ライフサイクルオブザーバーであるクラスからアクティビティへのデータの受け渡し

  24. 24

    MainActivityからフラグメントへのリストの受け渡し

  25. 25

    フラグメントからの親アクティビティのデータへのアクセス

  26. 26

    ArrayIndexOutOfBoundsException / alertdialogからアクティビティへのarraylistの受け渡し

  27. 27

    アダプタークラスからアクティビティクラスへのテキストビュー値の受け渡し

  28. 28

    アクティビティからフラグメントへのAndroid

  29. 29

    アクティビティからフラグメントへの通信方法は?

ホットタグ

アーカイブ