2016-10-21 3 views
0

私はエクササイズとしてサンプルプロジェクトを行い、タブレット(7 'と10')を扱うときに同じアクティビティで2つのフラグメントを表示したいとします。2つのフラグメントを使用するタブレットのレイアウト

これまでのところこれがあります。

enter image description here

私は左の私のrecyclerview(静的)フラグメントのデータを表示することができます見ることができるように。しかし、右側の断片は空です。

私には2つの質問があります。

1)どのように右の断片では、デフォルトでrecyclerviewの最初の行どのようにクリックリスナーを実装し、右のフラグメントを更新するには?(すなわち画像と記事)

2)のデータを表示するには?ここ

は私のコードである:

MainActivity

public class MainActivity extends AppCompatActivity { 
private boolean mTwoPane; 
private static final String DETAIL_FRAGMENT_TAG = "DFTAG"; 

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

    if(findViewById(R.id.detailed_match_reports)!=null) { 
     mTwoPane = true; 

     if (savedInstanceState == null) { 
      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.detailed_match_reports, new DetailedActivityFragment(),DETAIL_FRAGMENT_TAG) 
        .commit(); 
     }else{ 
      mTwoPane = false; 
     } 
    } 
    } 

}

レイアウト/ activity_main.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/match_reports" 
android:name="theo.testing.androidservices.fragments.MainActivityFragment" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_marginLeft="16dp" 
android:layout_marginRight="16dp" 
tools:context="theo.testing.androidservices.activities.MainActivity" 
tools:layout="@android:layout/list_content" /> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:baselineAligned="false" 
android:divider="?android:attr/dividerHorizontal" 
android:orientation="horizontal" 
tools:context="theo.testing.androidservices.activities.MainActivity"> 

<fragment 
    android:id="@+id/match_reports" 
    android:name="theo.testing.androidservices.fragments.MainActivityFragment" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="2" 
    tools:layout="@android:layout/list_content" /> 

<FrameLayout 
    android:id="@+id/detailed_match_reports" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="4" /> 


</LinearLayout> 

activity_mainレイアウト-sw600dp/MainActivityFragment

public class MainActivityFragment extends Fragment { 
public static final String TAG = "AelApp"; 
public static ArrayList<MyModel> listItemsList; 
RecyclerView myList; 
public static MatchReportsAdapter adapter; 

public MainActivityFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    updateMatchReport(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    getActivity().setTitle("Match Report"); 

    View rootView = inflater.inflate(R.layout.fragment_main_activity, container, false); 
    listItemsList = new ArrayList<>(); 

    myList = (RecyclerView)rootView.findViewById(R.id.listview_match_reports); 
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
    myList.setHasFixedSize(true); 
    myList.setLayoutManager(linearLayoutManager); 
    adapter = new MatchReportsAdapter(getActivity(), listItemsList); 
    myList.setAdapter(adapter); 

    return rootView; 
} 

public void updateMatchReport(){ 
    Intent i = new Intent(getActivity(), MatchReport.class); 
    getActivity().startService(i); 
} 

} 
+2

チュートリアルとサンプルアプリhttps://developer.android.com/training/basics/fragments/index.html – CSmith

答えて

0

まず、私は2番目の質問に答えてみましょう。

Fragment fragment = new MyRightSideFragment(); 
FragmentManager fm = getFragmentManager(); 
fm.beginTransaction().replace(R.id.detailed_match_reports, fragment).commit(); 

さて、最初の質問のために、あなたが必要とする:画面右側のフラグメントを表示するには(私はフラグメントを置き換えるために、フレームレイアウトのIDを使用しているかに注意してください)このような何かを追加しますクリックリスナーを実装するには、例hereがあります。

public class ReactiveAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 
     holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int position = (Integer)v.getTag(); 
       showDetail(position); 
      } 
     }); 
    } 
} 

私は(そうsomwhereあなたonBindViewHolderコードでこのタグを設定しなければなりません)の位置を特定するために、ビューのタグを使用しています注意してください。

public function showDetail(int position) { 
    ... show fragment por position 
} 

そして最後に、あなたのごOnCreateViewまたはどこかにあなたのセットアップコードで、showDetail(0)を呼び出します。

+0

お返事ありがとうございます。 showDetail(int position)メソッド内で何が起こっているのか教えてください。 – Theo

+0

showDetail()の内部では、フラグメントを表示するコードを配置する必要があります。これは、そこに書いた最初のコードです。 – Merlevede

+0

私はこれを私のアダプターに入れました。ただし、getSupportManagerは不明です。(。)public void showDetail(int position){ フラグメントのフラグメント=新しいDetailedActivityFragment(); FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction()。置換(R.id.detailed_match_reports、フラグメント).commit(); } – Theo

関連する問題