-1

i want to parse json data title into my tabLayout. i have two fragment for that, and now i want to get only title from my json data. currently i set manual tab title in MainActivity.java file. how i can parse json data into my tabLayout?

here is my MainActivity.java code:

public class MainActivity extends AppCompatActivity implements Home.OnFragmentInteractionListener,
        Politics.OnFragmentInteractionListener {

    TabLayout tabLayout;
    ViewPager viewPager;
    ViewPagerAdapter viewPagerAdapter;
    Toolbar toolbar;
    Dialog Developer;
    TextView txtclose;
    TextView facebook;

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

        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitleTextColor(0xFF0F0E37);

        tabLayout = (TabLayout)findViewById(R.id.tabLayout);
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPagerAdapter.addFragments(new Home(),"Bangla");
        viewPagerAdapter.addFragments(new Politics(),"Politics");
        viewPager.setAdapter(viewPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
        Developer = new Dialog(this);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.home, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){

            case R.id.about:
                Developer.setContentView(R.layout.about);
                txtclose =(TextView) Developer.findViewById(R.id.txtclose);
                facebook = (TextView) Developer.findViewById(R.id.facebook);
                facebook.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        TextView facebook = (TextView) findViewById(R.id.facebook);
                        Intent openFB = new Intent(Intent.ACTION_VIEW,
                                Uri.parse("https://facebook.com/test/"));
                        startActivity(openFB);
                    }
                });
                txtclose.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Developer.dismiss();
                    }
                });
                Developer.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                Developer.show();
                break;

            case R.id.share:
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
                String shareTitile ="test";
                String shareLink = "https://play.google.com/store/apps/details?id=test";
                intent.putExtra(Intent.EXTRA_SUBJECT, shareTitile);
                intent.putExtra(Intent.EXTRA_TEXT, shareLink);
                startActivity(Intent.createChooser(intent, "Share test"));
                break;
            default:
        }
        return super.onOptionsItemSelected(item);
    }

   

    @Override
    public void onFragmentInteraction(Uri uri) {

    }
}

here is my ViewPagerAdapter.java code:

public class ViewPagerAdapter extends FragmentPagerAdapter {


    ArrayList<Fragment> fragments = (new ArrayList<>());
    ArrayList<String> tabTitles = (new ArrayList<>());

    public void addFragments(Fragment fragments, String titles){
        this.fragments.add(fragments);
        this.tabTitles.add(titles);
    }

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

    @Override
    public Fragment getItem(int possition) {
        return fragments.get(possition);

    }

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

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

spouse, my json string is name. i want to parse that name into viewPagerAdapter.addFragments(new Home(),"Bangla"); and viewPagerAdapter.addFragments(new Politics(),"Politics");. here i want to replace Bangla to retrieve json data name and also replace Politics automatically from name. and i want to keep my 2 different fragments, because of - i will parse different data into both fragments.

i'm parsing josn from url as like https://website.com/api/details.php

here is my json response:

[
{"cid":"1","name":"Bangle"},
{"cid":"2","name":"Politics"},
{"cid":"3","name":"International"}
]

if you not understand my question, just let me know.

note: for better understanding, you can edit my code and post your answer!

thanks in advance.

ADM
  • 20,406
  • 11
  • 52
  • 83
Beginner
  • 50
  • 6

1 Answers1

0
public class MainActivity extends AppCompatActivity implements Home.OnFragmentInteractionListener,
        Politics.OnFragmentInteractionListener {

    TabLayout tabLayout;
    ViewPager viewPager;
    ViewPagerAdapter viewPagerAdapter;
    Toolbar toolbar;
    Dialog Developer;
    TextView txtclose;
    TextView facebook;

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

        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitleTextColor(0xFF0F0E37);
        
        String jsonStr = ""; // this variable should contain the JSON response from url, assing json response to this variable. 

        JSONArray jsonarray = new JSONArray(jsonStr);
        for (int i = 0; i < jsonarray.length(); i++) {
            JSONObject jsonobject = jsonarray.getJSONObject(i);
            String name = jsonobject.getString("name");
            // If you have only two fragments then simply take a count variable other wise you can save this "name" in string array.
            
                if(i==0){
                viewPagerAdapter.addFragments(new Home(),name);
                }else if(i == 1){
                viewPagerAdapter.addFragments(new Politics(),name);
                } 
        }


        tabLayout = (TabLayout)findViewById(R.id.tabLayout);
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPagerAdapter.addFragments(new Home(),"Bangla");
        viewPagerAdapter.addFragments(new Politics(),"Politics");
        viewPager.setAdapter(viewPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
        Developer = new Dialog(this);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.home, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){

            case R.id.about:
                Developer.setContentView(R.layout.about);
                txtclose =(TextView) Developer.findViewById(R.id.txtclose);
                facebook = (TextView) Developer.findViewById(R.id.facebook);
                facebook.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        TextView facebook = (TextView) findViewById(R.id.facebook);
                        Intent openFB = new Intent(Intent.ACTION_VIEW,
                                Uri.parse("https://facebook.com/test/"));
                        startActivity(openFB);
                    }
                });
                txtclose.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Developer.dismiss();
                    }
                });
                Developer.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                Developer.show();
                break;

            case R.id.share:
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
                String shareTitile ="test";
                String shareLink = "https://play.google.com/store/apps/details?id=test";
                intent.putExtra(Intent.EXTRA_SUBJECT, shareTitile);
                intent.putExtra(Intent.EXTRA_TEXT, shareLink);
                startActivity(Intent.createChooser(intent, "Share test"));
                break;
            default:
        }
        return super.onOptionsItemSelected(item);
    }

   

    @Override
    public void onFragmentInteraction(Uri uri) {

    }
}
IntelliJ Amiya
  • 74,896
  • 15
  • 165
  • 198
Asad khan
  • 156
  • 7