2017-09-25 18 views
0

異なるデータセットを扱い、複数のビューをレンダリングするために異なるレイアウトファイルを必要とする機能を実行するフラグメントを実装する必要があります。私は、複数のレイアウトビューに関連付けられたデータのすべてのバックエンド操作に対して共通のフラグメントを実装したいと考えています。どうすればいいですか?その代わりのフラグメント内で複数のレイアウトファイルを使用するにはどうすればよいですか?

+0

何かのように、私は適切にメインのXMLレイアウトファイルで – vinitpradhan18

答えて

0

あなたが質問(バックエンド・オペレーション)で述べたように、フラグメントすなわちタスクのために必要とされるいくつかの一般的なタスクを実行するすべてのメソッドをベースフラグメントを作成します。このソリューション

を試すことができます。

必要なフラグメントを異なるレイアウトで作成し、ベースフラグメントを拡張します。

public class BaseFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     return super.onCreateView(inflater,container,savedInstanceState); 
    } 
    //Add your backend operations for data and common methods 
} 

public class FragmentA extends BaseFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    //Add your first layout here 
    } 

} 

public class FragmentB extends BaseFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    //Add your second layout here 
    } 

} 
+0

を切り替えることができ、複数のXMLレイアウトファイルと一つの活性のように行うことができます。私はあなたに知らせようとします。 – vinitpradhan18

+0

問題があれば分かります。 – Anonymous

0

そうのようなあなた自身のコンディショニングに基づいて、異なるレイアウトを膨らませることができます。

View mView; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    if(condition_one()) 
     mView = inflater.inflate(R.layout.condition_one_layout,container,false); 
    else if(condition_two()) 
     mView = inflater.inflate(R.layout.condition_two_layout,container,false); 
. 
. 
. 
    return mView; 
} 
0

最善のアプローチは、一つだけの活動すなわちを使用することです。主な活動。この主なアクティビティでは、データに応じて複数のフラグメントをロードできます。 方法を教えてください。

あなたactivity_main.xmlがあると仮定します。

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

    <LinearLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

</LinearLayout> 

この活動は、その中の断片を持っているリニアレイアウトで構成されています。 データに応じて、この内部線形レイアウトで複数のフラグメントを読み込むことができます。あなたのMainActivity.javaで

、あなたがチェックを適用することにより、複数のフラグメントを読み込むことができます。ここでは

if(message.contains("first_fragment")) 
{ 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

    final FIRST_FRAGMENT fragment_activity = new FIRST_FRAGMENT(); 

    fragmentTransaction.replace(R.id.fragment_container,fragment_activity,"FIRST FRAGMENT"); 

    fragmentTransaction.commit(); 
} 
else if(message.contains("second_fragment")) 
{ 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

    final SECOND_FRAGMENT fragment_activity = new SECOND_FRAGMENT(); 

    fragmentTransaction.replace(R.id.fragment_container,fragment_activity,"SECOND FRAGMENT"); 

    fragmentTransaction.commit(); 

} 

私が行っていることは、あなたのメッセージが文字列first_fragmentを持っている場合、それはFIRST_FRAGMENTをロードする必要があり、です。同様に、メッセージに文字列second_fragmentがある場合は、SECOND_FRAGMENTをロードする必要があります。

さて、あなたFIRST_FRAGMENT.javaを実装するための時間:

public class FIRST_FRAGMENT extends Fragment { 

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

    return inflater.inflate(R.layout.first_fragment, null); 

} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 

// buttons or textview of fragment must be initialised here. 

} 

同様に、SECOND_FRAGMENTは同じになります。

ここで、現在ロードされているフラグメントを確認するとします。 あなたは、この:私はこれが動作すると思います

final FIRST_FRAGMENT myFragment = (FIRST_FRAGMENT) getSupportFragmentManager().findFragmentByTag("FIRST FRAGMENT"); 

if (myFragment != null && myFragment.isVisible()) { 

      myFragment.handleMessage(message); 

      // here handleMessage is the function declared in FIRST_FRAGMENT 
} 
+0

私はすでにナビゲーション引き出しを使っています。そのアクティビティの中で、私は既に各メニュー項目にフラグメントを使用しています。今、これらの断片では、私は複数のレイアウト機能を実装する必要があります。 – vinitpradhan18

関連する問題