androidでアプリ開発を行っています。
FragmentTabHostでタブレイアウトを実装しました。
ホームタブに現在いるとして、再びホームタブをクリックした場合の処理を検知したいです。
現在のタブと同じタブをクリックした場合にタブFragment内のRecyclerViewのスクロール位置を一番上に移動させたいのです。
例えば、Instagramでタブ押したらスクロール位置が一番上に移動すると思います。
以下のコード(一部)のように、タブを実装しているのですが、どうFragmentに通知させるのでしょうか
public class MainActivity extends FragmentActivity { private Class[] fragmentClass = {Fragment1.class, Fragment2.class, Fragment3.class, Fragment4.class, Fragment5.class}; private int[] icons = {R.drawable.icon4_custom, R.drawable.icon1_custom, R.drawable.icon3_custom, R.drawable.icon2_custom, R.drawable.icon5_custom}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // FragmentTabHost を取得する FragmentTabHost tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); tabHost.setup(this, getSupportFragmentManager(), R.id.container); for (int i = 0; i < fragmentClass.length; i++) { View view = LayoutInflater.from(this).inflate(R.layout.tab_layout, null); ImageView image = (ImageView) view.findViewById(R.id.tab_icon); image.setImageResource(icons[i]); //Intent intent = new Intent(this,fragmentClass[i]); // TabSpec を生成する TabHost.TabSpec tabSpec = tabHost.newTabSpec("tab" + i); //tabSpec.setIndicator("",getResources().getDrawable(icons[i])); //tabSpec.setContent(intent); tabSpec.setIndicator(view); // TabHost に追加 tabHost.addTab(tabSpec, fragmentClass[i], null); } tabHost.setCurrentTab(0); } }
tab_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" > <LinearLayout android:layout_width="44dp" android:layout_height="44dp" android:gravity="center" android:orientation="vertical" android:paddingBottom="4dp" android:paddingTop="4dp"> <ImageView android:id="@+id/tab_icon" android:layout_width="20dp" android:layout_height="20dp" /> </LinearLayout> </LinearLayout>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。