2016-06-21 10 views
0

私はFragmentStatePagerAdapterを使用してフラグメントのリストを表示しています。すべてのフラグメントにフローティングアクションボタンがあります。フラグメント間でスワイプすると浮動アクションボタンも変わるので、私の質問は浮動アクションボタンだけを維持することが可能で、フラグメント間でスワイプすると変化しないのですか? 異なるフラグメントの同じフローティングアクションボタン

アクティビティコード

package client.tclient.com.client; 

import android.net.Uri; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ListView; 

import java.util.ArrayList; 
import java.util.List; 

public class FollowingActivity extends AppCompatActivity implements TweetFragment.OnFragmentInteractionListener{ 

    ListView homeList; 
    SwipeRefreshLayout mySwipeRefreshLayout; 
    FloatingActionButton fab; 

    MyPagerAdapter mPagerAdapter; 
    ViewPager mviewPager; 
    private List<Fragment> listaFragments; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_following); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 


     listaFragments = new ArrayList<Fragment>(); 
     listaFragments.add(TweetFragment.newInstance(1)); 
     listaFragments.add(TweetFragment.newInstance(2)); 
     listaFragments.add(TweetFragment.newInstance(3)); 


     // Creamos nuestro Adapter 
     mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), 
       listaFragments); 

     // Instanciamos nuestro ViewPager 
     mviewPager = (ViewPager) findViewById(R.id.viewPager); 

     // Establecemos el Adapter 
     mviewPager.setAdapter(mPagerAdapter); 

    } 

    @Override 
    public void onFragmentInteraction(Uri uri) { 

    } 

} 

フラグメントコード

package client.tclient.com.client; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


/** 
* A simple {@link Fragment} subclass. 
* Activities that contain this fragment must implement the 
* {@link TweetFragment.OnFragmentInteractionListener} interface 
* to handle interaction events. 
* Use the {@link TweetFragment#newInstance} factory method to 
* create an instance of this fragment. 
*/ 
public class TweetFragment extends Fragment { 
    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

    // TODO: Rename and change types of parameters 
    private String mParam1; 
    private String mParam2; 

    private OnFragmentInteractionListener mListener; 

    public static final TweetFragment newInstance(long id){ 
     TweetFragment tf = new TweetFragment(); 
     Bundle bundle = new Bundle(1); 
     bundle.putLong("TWEET_ID",id); 
     tf.setArguments(bundle); 

     return tf; 
    } 
    public TweetFragment() { 
     // Required empty public constructor 
    } 


    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
    * 
    * @param param1 Parameter 1. 
    * @param param2 Parameter 2. 
    * @return A new instance of fragment TweetFragment. 
    */ 
    // TODO: Rename and change types and number of parameters 
    public static TweetFragment newInstance(String param1, String param2) { 
     TweetFragment fragment = new TweetFragment(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View inflate = inflater.inflate(R.layout.fragment_tweet, container, false); 
     TextView text =(TextView) inflate.findViewById(R.id.text); 
     text.setText(Long.toString(getArguments().getLong("TWEET_ID"))); 

     FloatingActionButton fab = (FloatingActionButton) inflate.findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Se presionó el FAB", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     return inflate; 
    } 

    // TODO: Rename method, update argument and hook method into UI event 
    public void onButtonPressed(Uri uri) { 
     if (mListener != null) { 
      mListener.onFragmentInteraction(uri); 
     } 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof OnFragmentInteractionListener) { 
      mListener = (OnFragmentInteractionListener) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mListener = null; 
    } 

    /** 
    * This interface must be implemented by activities that contain this 
    * fragment to allow an interaction in this fragment to be communicated 
    * to the activity and potentially other fragments contained in that 
    * activity. 
    * <p/> 
    * See the Android Training lesson <a href= 
    * "http://developer.android.com/training/basics/fragments/communicating.html" 
    * >Communicating with Other Fragments</a> for more information. 
    */ 
    public interface OnFragmentInteractionListener { 
     // TODO: Update argument type and name 
     void onFragmentInteraction(Uri uri); 
    } 
} 
+0

「変更しない」とはどういう意味ですか?あなたは 'ViewPager'を持っているので、その上にボタンが1つしかないと思われますか?コンテンツでスワイプしないようにどうか明らかにしてください。 –

+0

はいコンテンツの残りの部分でスワイプしないボタンが1つだけ必要です – AFS

答えて

0

それは私が断片間でスワイプするとき、フローティングアクションボタンが変化しないだけで維持することが可能ですか?

これは単なるXML経由でViewPagerの上にあなたの活動のレイアウトで1 FloatingActionButtonを作成し、間違いなく可能です。 CoordinatorLayoutでそれを達成できます。

アクティビティにアクションボタンを使用する例はたくさんありますが、唯一の違いはをImageViewの代わりに使用してFABの実装に違いがあるということです。また、各ページに表示する必要がないため、フラグメントのレイアウトからボタンを削除します。

レイアウトを実装したら、アクティビティのボタンにonClickListenerを追加します。 ViewPagerの現在のフラグメントのデータを使用する必要がある場合は、mviewPager.getCurrentItem()を呼び出してインデックスを取得できます。これは問題ではありません。

さらに具体的な質問がある場合は、可能な限り絞り込んで、より正確な回答ができるようにしてください。

関連する問題