2017-08-02 1 views
0

私は、スタティックタブを作成する方法、ボレーを使ってアンドロイドでデータを取得し、各フラグメントで作業する方法を知っていましたが、JSONを使ってダイナミックタブを作成し、tabs最初のタブストア"मुख्य समाचार"のように、さまざまなWebサービスから来る画像と詳細。 私が知っていることは、このようにタブを作成することです:私は、TABS名として"cat_name"を保存するAndroidの各フラグメントに動的タブを作成し、さまざまな機能を追加するにはどうすればよいですか?

public class TabActivity extends AppCompatActivity { 
private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 


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

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

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

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

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFrag(new OneFragment(), "ONE"); 
    adapter.addFrag(new TwoFragment(), "TWO"); 

    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 addFrag(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

      return mFragmentTitleList.get(position); 
     } 
    } 
} 

。どのようにすればいいですか?私はそれを試していますが、データを取得してタブ名として保存し、各タブのフラグメントを動的に作成し、各タブで個別に作業する方法を適切に修正できません。

ここでは、タブ名を取得するための私のWebサービスです。

{ 
    "status": 200, 
    "message": "Purchase order updated successfully", 
    "data": { 
     "page_title": "Home | Welcome", 
     "menu": [ 
      { 
       "cat_id": "1", 
       "cat_name": "मुख्य समाचार", 
       "description": ""    
      }, 
      { 
       "cat_id": "2", 
       "cat_name": "राजनीती ", 
       "description": "" 
      } 

編集どのように私は、この画像のように、個々のタブで作業することができ

:あなたはこのように行うことができます like in this image:

+0

「cat_id」を使用して特定のフラグメントにデータを格納することができます – Piyush

+0

どのように説明できますか。 –

+0

サーバーからの応答が得られたら、タブのタイトルを含むアダプタをいっぱいにして、1つのフラグメントだけを膨張させます。タブをスワイプしたり、タブをクリックしたりすると、カテゴリIDが一致する場合は、そのカテゴリデータをフラグメントに表示します。 – Piyush

答えて

0

public class TabActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 
// Fragment List 
private final List<Fragment> mFragmentList = new ArrayList<>(); 
// Title List 
private final List<String> mFragmentTitleList = new ArrayList<>(); 
private ViewPagerAdapter adapter; 


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

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    viewPager = (ViewPager) findViewById(R.id.container); 
    initTitle(); 

    // edited , you can use multiple titles and one Fragment 
    for (int i = 0; i < mFragmentTitleList.size(); i++) { 
     mFragmentList.add(new OneFragment()); 
    } 

    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    // Tab ViewPager setting 
    viewPager.setOffscreenPageLimit(mFragmentList.size()); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setTabsFromPagerAdapter(adapter); 
} 

/** 
* load title data ,it muest below ViewPagerAdapter initialize 
*/ 
private void initTitle() { 
    String response = "{\n" + 
      " \"status\": 200,\n" + 
      " \"message\": \"Purchase order updated successfully\",\n" + 
      " \"data\": {\n" + 
      "  \"page_title\": \"Home | Welcome\",\n" + 
      "  \"menu\": [\n" + 
      "   {\n" + 
      "    \"cat_id\": \"1\",\n" + 
      "    \"cat_name\": \"मुख्य समाचार\",\n" + 
      "    \"description\": \"\"    \n" + 
      "   },\n" + 
      "   {\n" + 
      "    \"cat_id\": \"2\",\n" + 
      "    \"cat_name\": \"राजनीती \",\n" + 
      "    \"description\": \"\"\n" + 
      "   }"; 

    try { 
     JSONObject jsonObject = new JSONObject(response); 
     int status = jsonObject.getInt("status"); 
     if (status == 200) { 
      JSONObject data = jsonObject.getJSONObject("data"); 
      JSONArray menu = data.getJSONArray("menu"); 
      for (int i = 0; i < menu.length(); i++) { 
       String cat_name = menu.getJSONObject(i).getString("cat_name"); 
       mFragmentTitleList.add(cat_name); 
      } 
     } else { 
      for (int i = 0; i < mFragmentList.size(); i++) { 
       mFragmentTitleList.add("no title"); 
      } 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

private void setupViewPager(ViewPager viewPager) { 

    adapter = new ViewPagerAdapter(getSupportFragmentManager(), mFragmentList, mFragmentTitleList); 

    viewPager.setAdapter(adapter); 
} 

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

    public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments, List<String> titleLists) { 
     super(fm); 
     this.mFragmentList = fragments; 
     this.mFragmentTitleList = titleLists; 
    } 

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

    @Override 
    public int getCount() { 
     return mFragmentList == null ? 0 : mFragmentList.size(); 
    } 

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

お手数ですが、

+0

異なるカテゴリの複数のフラグメントを作成する必要はありません。 1つのフラグメントのみが処理されます。 – Piyush

+0

OneFragmentは何度も作成できます。 – KeLiuyue

+0

インスタンスを作成した後にフラグメントを再利用することができます。フラグメントリストから毎回得る必要はありません – Piyush

関連する問題