如何将数据从活动传递到片段类?

时间:2017-08-28 18:42:14

标签: android android-layout android-fragments

我创建了一个新项目选项卡式视图。我想要在我的主屏幕上的三个布局第一个家庭第二类第三喜欢。我有Home活动的代码,这是代码在这里的片段活动

public class HomeFragment extends android.support.v4.app.Fragment {

    public HomeFragment() {

    }



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


    }
}

我还有另一项活动,即视频播放列表。我想在我的家庭片段页面中显示播放列表活动,但我太困惑了,对Android很新,我不知道该怎么做。

视频播放列表的代码在这里。如何在homeFragment类中调用此代码?我尝试了太多方法,但太糊涂了。

我想在我的家庭部分实施代码

public ProgressBar nextBar;

List<String> next_title;
List title;
List vid;
List<String> next_vid;
ArrayList<Videos> videos=new ArrayList<Videos>();
Videos video;
ArrayList<Videos> toclear=new ArrayList<Videos>();
List<Videos> fav = new ArrayList<Videos>();
InterstitialAd mInterstitialAd;
ListView listview;
Toolbar toolbar,favourite;
int menu_id;
LinearLayout layout, no_fav;
private HttpHandler parserVideo;
String nextPageToken;
String apiKey = "AIzaSyDD73ZAzcR6bXa1qOv8YZY3fFmNwfTPs48";
String url;
Main_activity_adapter search;
Main_activity_adapter adapter;

String url_home= "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=15&playlistId=PLQGGrzFoybiOks7f2BReNzNwkRw3cN6RB&key="+apiKey+"";



@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.video_sec);
    nextBar = (ProgressBar) findViewById(R.id.nextProgress);
    layout = (LinearLayout) findViewById(R.id.linlaHeaderProgress);
    url = url_home;
    listview = (ListView) findViewById(R.id.listview);
    no_fav = (LinearLayout)findViewById(R.id.no_favourit);
    no_fav.setVisibility(View.GONE);


    parserVideo = new HttpHandler();       
    getVideosPlaylist videosplaylist = new getVideosPlaylist();
    videosplaylist.execute();



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


    listview.setOnScrollListener(this);




}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    final MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
    final SearchView searchView = (SearchView) myActionMenuItem.getActionView();
    final String toolbar_name = toolbar.getTitle().toString();
    MenuItemCompat.setOnActionExpandListener(myActionMenuItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            updateList();
            return true;
        }
    });
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {

            if (!s.isEmpty()) {
                setSearch();
                search.getFilter().filter(s);


            }
            return false;
        }
    });

    return true;
}// end of toolbar control

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    return super.onOptionsItemSelected(item);
}
public void updateList(){

    adapter = new Main_activity_adapter(this, videos, false);

    listview.setAdapter(adapter);

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {



                                                Videos v = (Videos) adapter.getItemAtPosition(arg2);
                                                Intent n = new Intent(Videos_activity.this, PlayingVideo.class);
                                                n.putExtra("vid", v.getVid().toString());
                                                n.putExtra("title", v.getTitle().toString());
                                                startActivity(n);

                                        }
                                    }

    );
}

JSONObject jp_obj;
JSONArray jar_array;

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    String toolbar_check = toolbar.getTitle().toString();

    switch(view.getId()){
        case R.id.listview:
            final int lastItem = firstVisibleItem + visibleItemCount;
            if (lastItem == totalItemCount) {
                if(toolbar_check!="Favourites") {
                    OnScrollList onscroll = new OnScrollList();
                    onscroll.execute();
                }
            }

    }
}


class getVideosPlaylist extends AsyncTask<String, String, String> {


    @Override
    protected String doInBackground(String... params) {

        jp_obj = parserVideo.getJsonFromYoutube(url);

        try {
            if (jp_obj.has("nextPageToken")) {
                nextPageToken = jp_obj.getString("nextPageToken");

            }
            jar_array = new JSONArray(jp_obj.getString("items"));

            if(jp_obj != null) {
                JSONObject c = jar_array.getJSONObject(0);
                String json_check = c.getJSONObject("snippet").getString("title");
                if (json_check == null) {

                } else {
                    title = new ArrayList<String>(jar_array.length());
                    vid = new ArrayList<>(jar_array.length());
                    for (int j = 0; j < jar_array.length(); j++) {
                        c = jar_array.getJSONObject(j);
                        String str = c.getJSONObject("snippet").getString("title");
                        str = new String(str.replaceAll("\\['\\]", ""));
                        String link = c.getJSONObject("snippet").getJSONObject("resourceId").getString("videoId");
                        video = new Videos(str, link);
                        videos.add(video);
                    }
                }

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }
    @Override
    protected void onCancelled(){
        super.onCancelled();
    }
    @Override
    protected void onPreExecute() {

        layout.setVisibility(View.VISIBLE);
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String s) {
        updateList();
        layout.setVisibility(View.GONE);
        cancel(true);
        super.onPostExecute(s);

    }
}
class OnScrollList extends AsyncTask<String,String,String>{


    @Override
    protected String doInBackground(String... params) {
        if (nextPageToken!=null){
            String nextPage = "&pageToken="+nextPageToken+"";

            JSONObject next = parserVideo.getJsonFromYoutube(url+nextPage);

            try {

                JSONArray array = new JSONArray(next.getString("items"));
                if (next != null) {
                    JSONObject c = array.getJSONObject(0);
                    String json_check = c.getJSONObject("snippet").getString("title");
                    if (json_check == null) {

                    } else {
                        next_title = new ArrayList<String>(array.length());
                        next_vid = new ArrayList<String>((array.length()));
                        for (int j = 0; j < array.length(); j++) {
                            c = array.getJSONObject(j);
                            String str = c.getJSONObject("snippet").getString("title");
                            str = new String(str.replaceAll("\'", ""));
                            next_title.add(str);
                            String nextLink = c.getJSONObject("snippet").getJSONObject("resourceId").getString("videoId");
                            next_vid.add(nextLink);
                            video = new Videos(str, nextLink);
                            toclear.add(video);
                        }
                    }


                }if (next.has("nextPageToken")){
                    nextPageToken = next.getString("nextPageToken");
                }else if(!next.has("nextPageToken")){
                    nextPageToken = null;}
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
        return null;
    }
    @Override
    protected void onCancelled(){
        super.onCancelled();
    }

    @Override
    protected void onPostExecute(String s) {
        videos.addAll(toclear);
        adapter.notifyDataSetChanged();
        nextBar.setVisibility(View.GONE);
        toclear.clear();
        cancel(true);
        super.onPostExecute(s);
    }

    @Override
    protected void onPreExecute() {
        nextBar.setVisibility(View.VISIBLE);
        super.onPreExecute();
    }
}
public  void  setSearch()
{
    search = new Main_activity_adapter(Videos_activity.this, videos, true);
    listview.setAdapter(search);
    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {


                                                Videos v = (Videos)search.getItemAtPosition(arg2);
                                                Intent n = new Intent(Videos_activity.this, PlayingVideo.class);
                                                n.putExtra("vid", v.getVid().toString());
                                                n.putExtra("title", v.getTitle().toString());
                                                startActivity(n);

                                        }
                                    }

    );
}

public void favouritList(){
    Main_activity_adapter favourit_adapter = new Main_activity_adapter(this, videos, false);
    listview.setAdapter(favourit_adapter);
    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {


                                            Videos v = (Videos) adapter.getItemAtPosition(arg2);
                                            Intent n = new Intent(Videos_activity.this, PlayingVideo.class);
                                            n.putExtra("vid", v.getVid().toString());
                                            n.putExtra("title", v.getTitle().toString());
                                            startActivity(n);
                                        }
                                    }

    );
}

3 个答案:

答案 0 :(得分:0)

首先,您需要了解Activity包含片段,反之亦然。因此,让您的想法成真的一种方法是让您的活动包含三个片段:

  • 1)家庭
  • 2)范畴
  • 3)收藏

要将数据从活动发送到片段,通常使用Bundle对象。 然后创建片段的实例并通过setArguments(yourBundle)方法将bundle放在那里。

这是主要的想法,如果你想要细节,那么阅读官方文档并在SOF上使用搜索。

答案 1 :(得分:0)

public static String test="";中定义类似Activity的变量,然后在Fragment中将其变为String test1=ActivityName.test;,现在test的值为test1

答案 2 :(得分:0)

使用Bundle

Fragment fragment = new YourFragment();
Bundle bundle = new Bundle();
bundle.putString("yourArg","yourType"); //this could be String, int, float,etc
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.yourContainer,fragment).commit();

并在你的片段中onCreateView

Bundle bundle = getArguments();