Захват события нажатия вкладки в Android Tabview - PullRequest
6 голосов
/ 09 августа 2010

У меня есть вкладка в моем приложении для Android с 3 вкладками. Все вкладки работают нормально.

Теперь я хочу выполнить дополнительную логику, когда нажата вкладка (вверху) текущей активной вкладки.

Вот пример:

В одной из моих вкладок я предоставляю пользователю возможность сортировать вещи в другом порядке. При нажатии на вкладку текущей активной вкладки, я хочу сбросить все эти сортировки.

Можно ли захватить событие нажатия на вкладку в представлении вкладок и выполнить некоторую дополнительную логику?

Редактировать: отредактировано для ясности.

Ответы [ 4 ]

4 голосов
/ 02 декабря 2010

Вот как должен работать ваш код:

getTabWidget().getChildAt(getTabHost().getCurrentTab()).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
        //do whatever you need

        }
});
3 голосов
/ 15 августа 2012

Я нашел одно чистое и простое решение для обнаружения кликов на выбранной вкладке

Шаги:

1: Расширение TabActivity в вашем классе.2: В методе onResume () реализовать следующий метод

Для каждой вкладки (i) реализовать это:

TabHost tabHost = getTabHost();

public void onResume() {

 super.onResume();
     tabHost.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                   count++;
                   tabHost.setCurrentTab(0);
    //based on your count value..you can do anything...like going back to homepage...
    //    similar thing exist on iphone (double tab a tab..it takes back to homepage)
     }
   });
 }      

Так как у нас всегда есть фиксированное количество вкладок, реализация его отдельноне проблема.

3 голосов
/ 07 февраля 2011

Если вы ищете решение, я мог бы его найти. Взгляните сюда: Android TabWidget обнаруживает щелчок по текущей вкладке

0 голосов
/ 18 августа 2011
    for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
    {
        getTabWidget().getChildAt(i).setOnClickListener(new OnClickListener() { 

            @Override 
            public void onClick(View v) { 

                if (getTabHost().getCurrentTabTag().equals(v.getTag()))
                {
                    int nextTab = getTabHost().getCurrentTab();
                    tabHost.setCurrentTab(prevTab);
                    tabHost.setCurrentTab(nextTab);
                    prevTab = nextTab;
                }
                else
                    tabHost.setCurrentTabByTag((String) v.getTag());
            } 
        });
    }

Вам нужна глобальная переменная;

    private int prevTab = 1;   //any tab except the initial one.

Этот код работает для меня. Немного некрасиво, вы должны установить один и тот же тег для вкладки и просмотра Например;

    intent = new Intent().setClass(this, AnaSayfa.class);
    spec = tabHost.newTabSpec("firstTab").setIndicator(makeTabIndicator(R.drawable.firstTab, "First Tab" , "firstTab"))
                  .setContent(intent);
    tabHost.addTab(spec);

и метод makeTabIndicator такой,

    private View makeTabIndicator(int drawable, String text, String viewTag){ 

        View view = LayoutInflater.from(this).inflate(R.layout.tab_layout, null);

        ImageView image = (ImageView) view.findViewById(R.id.imageView1);       
        image.setImageResource(drawable);
        image.setAdjustViewBounds(true);

        TextView tv = (TextView) view.findViewById(R.id.textView1);
        tv.setText(text);

        view.setTag(viewTag);               
        return view;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...