2016-10-21 4 views
0

Ich mache ein Beispielprojekt als Übung und möchte zwei Fragmente in der gleichen Aktivität im Umgang mit Tabletten (7 'und 10') anzeigen.Layout für Tabletten mit zwei Fragmenten

Also was ich bisher habe ist das.

enter image description here

Wie man sehen kann ich die Daten meiner recyclerview in dem linken (statisch) Fragmente anzeigen kann. Das rechte Fragment ist jedoch leer.

Also habe ich zwei Fragen.

1) Wie wird standardmäßig im rechten Fragmente zur Anzeige der Daten der ersten Reihe von recyclerview? (Dh Bild und Artikel)

2) Wie der Klick-Listener zu implementieren und das richtige Fragment aktualisieren?

Hier ist mein Code:

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; 
     } 
    } 
    } 

}

Layout/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" /> 

Layout-sw600dp/activity_main

<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> 

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

Tutorial und Beispiel-App unter https://developer.android.com/training/basics/fragments/index.html – CSmith

Antwort

0

Lassen Sie mich zunächst auf die zweite Frage beantworten. Um zu zeigen, so etwas wie dieses ein Fragment auf der rechten Seite des Bildschirms hinzufügen (beachten Sie, wie ich, dass die ID des Rahmens Layout bin mit dem Fragment ersetzen):

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

nun für die erste Frage, die Sie benötigen Um Klick-Listener zu implementieren, finden Sie ein Beispiel 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); 
      } 
     }); 
    } 
} 

Beachten Sie, dass ich den Tag der Ansicht bin mit der Position zu identifizieren (so somwhere in Ihrem onBindViewHolder Code müssen Sie diesen Tag gesetzt).

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

und schließlich, wenn Ihr in Ihrem OnCreateView oder irgendwo in Ihrem Setup-Code, rufen showDetail(0).

+0

Danke für die Antwort. Kannst du mir bitte sagen, was in der showDetail (int position) -Methode passiert? – Theo

+0

Innerhalb von showDetail() müssen Sie den Code platzieren, um das Fragment anzuzeigen, das ist der erste Codeabschnitt, den ich dort geschrieben habe. – Merlevede

+0

Ich stecke das in meinen Adapter. Der getSupportManager ist jedoch unbekannt :(. Public void showDetail (int position) { Fragmentfragment = new DetailedActivityFragment(); FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction().replace (R.id.detailed_match_reports, Fragment) .commit(); } – Theo

Verwandte Themen