开发者

Dynamic Tab Removal/Deletion in Tabhost

I've searched long and far and found a few different ways people are dealing with removing a single and often specific tab from a TabHost object. I would like to try, if I may, to gather all those methods to this single question so that people my "shop" for the right method they need and hopefully get the answer they need to write their code; I also feel that it will cut down on the number of these questions.

At the moment I'm having trouble finding a solution to my code as well. I'm attempting to get rid of a particular tab without touching the others; hopefully I too will find my answer.

I wont pick a particular answer for this question for a while, so please just list the method you used to deal with this problem here for others to see.

Thank you.

Update:

Okay, here is my current code:

TabHost mTabHost;
TabHost.TabSpec spec;
Intent mSettingsIntent;
Intent mSearchIntent;
int tabNum = 1;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mSearchIntent = new Intent().setClass(this, SearchTab.class);
    mTabHost = getTabHost();
    mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);

    makeTab("Tab");


    final Button newSearchBtn = (Button) findViewById(R.id.new_search_btn);
    newSearchBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Perform action on clicks
            EditText searchBar = (EditText) findViewById(R.id.search_bar);
            final String searchString = searchBar.getText().toString();
            makeTab(searchString);

        }
    });
    final EditText edittext = (EditText) findViewById(R.id.search_bar);
    edittext.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // If the event is a key-down event on the "enter" button
            if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                (keyCode == KeyEvent.KEYCODE_ENTER)) {
              // Perform action on key press
                EditText searchBar = (EditText) findViewById(R.id.search_bar);
                final String searchString = searchBar.getText().toString();
                makeTab(searchString);
              return true;
            }
            return false;
        }
    });


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getMenuInflater();
     inflater.inflate开发者_如何转开发(R.menu.tab_menu, menu);
     return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.menu_close:
        // TODO: Find/define method to close a single tab
        closeTab();
        return true;
    case R.id.menu_settings:
        // TODO: Create a basic Settings Activity and call constructor here
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

public void makeTab(String tabText) {
    String tabTag = "Tab" + tabNum++;
    View tabview = createTabView(mTabHost.getContext(), tabText);
    spec = mTabHost.newTabSpec(tabTag).setIndicator(tabview).setContent(new Intent().setClass(this, SearchTab.class));
    mTabHost.addTab(spec);
    mTabHost.setCurrentTabByTag(tabTag);
}

private void closeTab() {
    // TODO: Define method for closing a single tab with tabTag
    mTabHost.removeViewAt(mTabHost.getCurrentTab());
}

private static View createTabView(final Context context, final String text) {
        View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
        TextView tv = (TextView) view.findViewById(R.id.tabsText);
        tv.setText(text);
        return view;
    }

}

My app locks up due to a NullPointer Exception I'm not sure why; I'm still trying to figure out how to read the debugger perspective in Eclispe for clues. I'll update when I have more.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜