2017-08-07 43 views
0

我創建使用「主/詳細信息流」活動一個示例應用程序。我已經添加了兩個按鈕,下一步上一頁到詳細活性。如何我設置編程的按鈕操作,而不必去來回列表詳細之間?如何編程Next和Prev的主/從按鈕流

app's screenshot

item_detail.xml

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

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingStart="30dp" 
     android:paddingEnd="30dp" 
     android:weightSum="4" 
     android:gravity="end" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/button_prev" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Prev"/> 

     <Button 
      android:id="@+id/button_next" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Next"/> 
    </LinearLayout> 

    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:id="@+id/item_detail" 
       style="?android:attr/textAppearanceLarge" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:padding="16dp" 
       android:textIsSelectable="true" 
       tools:context="co.test.app.sample.itemapplication.ItemDetailFragment"/> 
</LinearLayout> 

activity_item_detail.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
               xmlns:app="http://schemas.android.com/apk/res-auto" 
               xmlns:tools="http://schemas.android.com/tools" 
               android:layout_width="match_parent" 
               android:layout_height="match_parent" 
               android:fitsSystemWindows="true" 
               tools:context="co.test.app.sample.itemapplication.ItemDetailActivity" 
               tools:ignore="MergeRootFrame"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/app_bar_height" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/toolbar_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:toolbarId="@+id/toolbar"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/detail_toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 
     </android.support.design.widget.CollapsingToolbarLayout> 

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

    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/item_detail_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    </android.support.v4.widget.NestedScrollView> 

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

DummyContent.java

package co.test.app.sample.itemapplication.dummy; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

/** 
* Helper class for providing sample content for user interfaces created by 
* Android template wizards. 
* <p> 
* TODO: Replace all uses of this class before publishing your app. 
*/ 
public class DummyContent { 

    /** 
    * An array of sample (dummy) items. 
    */ 
    public static final List<DummyItem> ITEMS = new ArrayList<DummyItem>(); 

    /** 
    * A map of sample (dummy) items, by ID. 
    */ 
    public static final Map<String, DummyItem> ITEM_MAP = new HashMap<String, DummyItem>(); 

    private static final int COUNT = 25; 

    static { 
     // Add some sample items. 
     for (int i = 1; i <= COUNT; i++) { 
      addItem(createDummyItem(i)); 
     } 
    } 

    private static void addItem(DummyItem item) { 
     ITEMS.add(item); 
     ITEM_MAP.put(item.id, item); 
    } 

    private static DummyItem createDummyItem(int position) { 
     return new DummyItem(String.valueOf(position), "Item " + position, makeDetails(position)); 
    } 

    private static String makeDetails(int position) { 
     StringBuilder builder = new StringBuilder(); 
     builder.append("Details about Item: ").append(position); 
     for (int i = 0; i < position; i++) { 
      builder.append("\nMore details information here."); 
     } 
     return builder.toString(); 
    } 

    /** 
    * A dummy item representing a piece of content. 
    */ 
    public static class DummyItem { 
     public final String id; 
     public final String content; 
     public final String details; 

     public DummyItem(String id, String content, String details) { 
      this.id = id; 
      this.content = content; 
      this.details = details; 
     } 

     @Override 
     public String toString() { 
      return content; 
     } 
    } 
} 

ItemDetailActivity.java

package co.test.app.sample.itemapplication; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.app.ActionBar; 
import android.view.MenuItem; 

/** 
* An activity representing a single Item detail screen. This 
* activity is only used narrow width devices. On tablet-size devices, 
* item details are presented side-by-side with a list of items 
* in a {@link ItemListActivity}. 
*/ 
public class ItemDetailActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_item_detail); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.detail_toolbar); 
     setSupportActionBar(toolbar); 

     // Show the Up button in the action bar. 
     ActionBar actionBar = getSupportActionBar(); 
     if (actionBar != null) { 
      actionBar.setDisplayHomeAsUpEnabled(true); 
     } 

     // savedInstanceState is non-null when there is fragment state 
     // saved from previous configurations of this activity 
     // (e.g. when rotating the screen from portrait to landscape). 
     // In this case, the fragment will automatically be re-added 
     // to its container so we don't need to manually add it. 
     // For more information, see the Fragments API guide at: 
     // 
     // http://developer.android.com/guide/components/fragments.html 
     // 
     if (savedInstanceState == null) { 
      // Create the detail fragment and add it to the activity 
      // using a fragment transaction. 
      Bundle arguments = new Bundle(); 
      arguments.putString(ItemDetailFragment.ARG_ITEM_ID, 
        getIntent().getStringExtra(ItemDetailFragment.ARG_ITEM_ID)); 
      ItemDetailFragment fragment = new ItemDetailFragment(); 
      fragment.setArguments(arguments); 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.item_detail_container, fragment) 
        .commit(); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      // This ID represents the Home or Up button. In the case of this 
      // activity, the Up button is shown. For 
      // more details, see the Navigation pattern on Android Design: 
      // 
      // http://developer.android.com/design/patterns/navigation.html#up-vs-back 
      // 
      navigateUpTo(new Intent(this, ItemListActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

ItemListActivity.java

package co.test.app.sample.itemapplication; 

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


import co.test.app.sample.itemapplication.dummy.DummyContent; 

import java.util.List; 

/** 
* An activity representing a list of Items. This activity 
* has different presentations for handset and tablet-size devices. On 
* handsets, the activity presents a list of items, which when touched, 
* lead to a {@link ItemDetailActivity} representing 
* item details. On tablets, the activity presents the list of items and 
* item details side-by-side using two vertical panes. 
*/ 
public class ItemListActivity extends AppCompatActivity { 

    /** 
    * Whether or not the activity is in two-pane mode, i.e. running on a tablet 
    * device. 
    */ 
    private boolean mTwoPane; 

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

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     toolbar.setTitle(getTitle()); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     View recyclerView = findViewById(R.id.item_list); 
     assert recyclerView != null; 
     setupRecyclerView((RecyclerView) recyclerView); 

     if (findViewById(R.id.item_detail_container) != null) { 
      // The detail container view will be present only in the 
      // large-screen layouts (res/values-w900dp). 
      // If this view is present, then the 
      // activity should be in two-pane mode. 
      mTwoPane = true; 
     } 
    } 

    private void setupRecyclerView(@NonNull RecyclerView recyclerView) { 
     recyclerView.setAdapter(new SimpleItemRecyclerViewAdapter(DummyContent.ITEMS)); 
    } 

    public class SimpleItemRecyclerViewAdapter 
      extends RecyclerView.Adapter<SimpleItemRecyclerViewAdapter.ViewHolder> { 

     private final List<DummyContent.DummyItem> mValues; 

     public SimpleItemRecyclerViewAdapter(List<DummyContent.DummyItem> items) { 
      mValues = items; 
     } 

     @Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.item_list_content, parent, false); 
      return new ViewHolder(view); 
     } 

     @Override 
     public void onBindViewHolder(final ViewHolder holder, int position) { 
      holder.mItem = mValues.get(position); 
      holder.mIdView.setText(mValues.get(position).id); 
      holder.mContentView.setText(mValues.get(position).content); 

      holder.mView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (mTwoPane) { 
         Bundle arguments = new Bundle(); 
         arguments.putString(ItemDetailFragment.ARG_ITEM_ID, holder.mItem.id); 
         ItemDetailFragment fragment = new ItemDetailFragment(); 
         fragment.setArguments(arguments); 
         getSupportFragmentManager().beginTransaction() 
           .replace(R.id.item_detail_container, fragment) 
           .commit(); 
        } else { 
         Context context = v.getContext(); 
         Intent intent = new Intent(context, ItemDetailActivity.class); 
         intent.putExtra(ItemDetailFragment.ARG_ITEM_ID, holder.mItem.id); 

         context.startActivity(intent); 
        } 
       } 
      }); 
     } 

     @Override 
     public int getItemCount() { 
      return mValues.size(); 
     } 

     public class ViewHolder extends RecyclerView.ViewHolder { 
      public final View mView; 
      public final TextView mIdView; 
      public final TextView mContentView; 
      public DummyContent.DummyItem mItem; 

      public ViewHolder(View view) { 
       super(view); 
       mView = view; 
       mIdView = (TextView) view.findViewById(R.id.id); 
       mContentView = (TextView) view.findViewById(R.id.content); 
      } 

      @Override 
      public String toString() { 
       return super.toString() + " '" + mContentView.getText() + "'"; 
      } 
     } 
    } 
} 

回答

0

這是用於轉發到detail page的代碼段。

if (mTwoPane) { 
        Bundle arguments = new Bundle(); 
        arguments.putString(ItemDetailFragment.ARG_ITEM_ID, holder.mItem.id); 
        ItemDetailFragment fragment = new ItemDetailFragment(); 
        fragment.setArguments(arguments); 
        getSupportFragmentManager().beginTransaction() 
          .replace(R.id.item_detail_container, fragment) 
          .commit(); 
       } else { 
        Context context = v.getContext(); 
        Intent intent = new Intent(context, ItemDetailActivity.class); 
        intent.putExtra(ItemDetailFragment.ARG_ITEM_ID, holder.mItem.id); 

        context.startActivity(intent); 
       } 

您可以通過改變arguments.putString(ItemDetailFragment.ARG_ITEM_ID, holder.mItem.id);

值:使用上面的片斷中的nextprev按鈕onClick事件轉發到任何頁面。歡呼:)

+0

有沒有辦法對我來說,創建一個類,而不是重複相同的代碼爲每個類? – xxmilcutexx

+0

我試圖創建一個靜態類,但我有getSupportFragmentManager – xxmilcutexx

+0

問題通過SupportFragmentManager實例的自定義靜態方法作爲參數。 – Darish

相關問題