如何以编程方式从子片段切换Tab

时间:2014-01-24 08:04:56

标签: android android-fragments tabs android-viewpager

我的app基本结构如下

Tabs
 SherlockFragmentActivity(Has Fragments One, Two, Three, Four)
 |
 |-->|SherlockFragment_one (Has Chiled Fragments A, B, C Using Viewpager)
 |   |
 |   |-->SherlockFragment_one_A
 |   |-->SherlockFragment_one_B
 |   |-->SherlockFragment_one_C
 |
 |
 |-->SherlockFragment_two
 |-->SherlockFragment_three
 |-->SherlockFragment_Four

这是图像

enter image description here

看看我的孩子片段(Say SherlockFragment_one_A)有一个Listview。我想在此Listview的任何项目点击上切换Tab。

我的app结构的代码。请参阅我接受的答案android-layout-actionbarsherlock-tabs-viewpagerindicator-on-1st-tab

问题:是否可以从子片段

逐步切换选项卡

这是我的具有listview

的子片段的代码
   package fragment.overview;

import android.app.ActionBar;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TabHost;

import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragment;
import com.example.myappstructure.R;

public class OverView_Nearby_events extends SherlockFragment implements OnItemClickListener {

    private ListView listView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.overview_nearby_evets, container,
                false);

        listView = (ListView) v.findViewById(R.id.listView1);
        listView.setAdapter(new MyListAdapter());

        return v;

    }

    @Override
    public void onStart() {
        super.onStart();

        listView.setOnItemClickListener(this);

    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

        // **********Switch Tab over Here**********//

        // I tried this. but not any success.
        //ActionBar.Tab host = (ActionBar.Tab) getActivity().findViewById(android.R.id.tabs);
        //host.setCurrentTab(3);
    }

    private class MyListAdapter extends BaseAdapter {

        @Override
        public int getCount() {

            return 10;
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) getActivity()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(
                    R.layout.overview_nearby_events_listitems, parent, false);

            return rowView;
        }
    }
}

编辑1 临时解决方案

if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= 11) {
        android.app.ActionBar.Tab eventTab = getActivity().getActionBar()
                .getTabAt(3);
        getActivity().getActionBar().selectTab(eventTab);
    }

但这有效至API级别11,我使用了支持库。如何使这个工作在所有Android版本,即API级别8分钟froyo?

1 个答案:

答案 0 :(得分:0)

解决方案

if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= 11) {
        android.app.ActionBar.Tab eventTab = getActivity().getActionBar()
                .getTabAt(3);
        getActivity().getActionBar().selectTab(eventTab);
    }

但这有效至API级别11,我使用了支持库。如何使这个工作在所有Android版本,即API级别8分钟froyo?我不知道这个。 :)