2017-11-02 6 views
-3

異なるデータを読み込むタブレイアウトがあります。すべてのフラグメントに対して同じUIが1つしかありません。しかし、それぞれのデータに対して私は異なる断片クラスファイルを持っています。1つのフラグメントクラスを再利用して、異なるデータを同じアクティビティに読み込む方法

同じUIに対してさらに5つのフラグメントクラスを作成する必要はありません。私は、同じ1つの断片クラスコードを再利用し、異なるデータをその中に表示したい。

私は別のものを渡したいString id = String.valueOf(1);それぞれのフラグメントに異なるデータを取得します。

この

は私のコードです

つのフラグメントのクラス

public class OneFragment extends Fragment implements View.OnClickListener { 
    private static final String TAG = "OneFragment"; 

    DisplayData displayData = new DisplayData(); 
    DetailsData reqDetailnew; 

    OneFragment context; 
    TextView title, subject; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.tab, container, false); 

     context = OneFragment.this; 

     //text 
     title = (TextView) view.findViewById(R.id.title); 
     subject = (TextView) view.findViewById(R.id.subject); 





      return view; 
    } 
} 
} 

メインActivityクラス

public class MainActivity extends AppCompatActivity { 

    private PageAdapter PageAdapter; 

    private ViewPager mViewPager; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.subject_information); 
     Log.d(TAG, "onCreate: Starting."); 

     PageAdapter = new PageAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.container); 
     setupViewPager(mViewPager); 


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


    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case android.R.id.home: 

       // app icon in action bar clicked; goto parent activity. 
       this.finish(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 

    } 

    private void setupViewPager(ViewPager viewPager) { 
     PageAdapter adapter = new PageAdapter(getSupportFragmentManager()); 

     adapter.addFragment(new Tab1Fragment(), "1"); 
     adapter.addFragment(new Tab2Fragment(), "2"); 
     adapter.addFragment(new Tab3Fragment(), "3"); 
     adapter.addFragment(new Tab4Fragment(), "4"); 
     adapter.addFragment(new Tab5Fragment(), "5"); 

     viewPager.setAdapter(adapter); 


    } 

} 

ページャアダプタ

public class PageAdapter extends FragmentPagerAdapter { 

    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

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

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

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

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

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

MainAcitivityのXML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 



    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

     > 


     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="scrollable" 
      app:tabGravity="fill" 
      app:tabTextColor="#ffffff" 
      /> 


    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 


</LinearLayout> 

タブXML

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Title:" 
      /> 

      <TextView 
      android:id="@+id/subject" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Subject:" 
      /> 
</LinearLayout> 

答えて

1

@Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return newInstance("1"); 
      case 1: 
       return newInstance("2"); 
      case 2: 
       return newInstance("3"); 
      default: 
       return null; 
     } 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "1"; 
      case 1: 
       return "2"; 
      case 2: 
       return "3"; 
      default: 
       return ""; 
     } 
    } 

    public OneFragment newInstance(String param1) { 
    OneFragment fragment = new OneFragment(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    fragment.setArguments(args); 
    return fragment; 
} 

とOneFragmentで:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    String string = getArguments().getString(ARG_PARAM1); 
    // do stuff 
    } 
+0

他の条件を使用してonCreateViewに文字列値を渡す方法を教えていただけますか?データを取得してください! – feltonjk

+0

PageAdapterにOneFragmentクラスを宣言する方法を教えてください。このエラーは来ています! https://i.stack.imgur.com/4aIfH.jpg – feltonjk

+0

適切なコードと説明で新しい質問として追加してください。あなたが望むならここにリンクを投稿してください。 – humazed

1

ページアダプターでフラグメントを返すときに、バンドルを渡しますYourFragmentClassのonCreateViewはあなたが決めるのに役立ちますそのint型positionを取るあなたの内側その後

@Override 
public Fragment getItem(int position) { 
    Bundle bundle = new Bundle(); 
    bundle.putInt("position", position); 

    YourFragmentClass frag = new YourFragmentClass(); 
    frag.setArguments(bundle); 
    return frag; 
} 

おそらくswitchまたはifの文を使用して膨らませるもの:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 

int position = getArguments().getInt("position",0); 

...//Your logic here depending on the position you passed! 
} 

あなたのポジションには、あなたのポジションに応じて何かを膨張させる条件文を使用します。あなたのPageAdapterで

+0

ちょっと仲間は、あなたがもし状態に位置を使用してOnCreateViewに文字列値を渡すか、切り替える方法を私に示すことができますか? – feltonjk

+0

私はちょうどあなたのアダプタから 'int'を渡し、フラグメントのonCreateViewでそれを取得する方法を示しました – Xenolion

+0

ああ、ありがとう。 – feltonjk

関連する問題