2016-03-13 2 views
1

Я начинаю, и мне нужно знать, как изменить имена табов и имена фрагментов в моем приложении, пожалуйста, помогите мне, и когда я использую строку и указываю имена для вкладок и изменяю логику на вкладке Names.length, тогда мое приложение выйдет из строя, сказав, что «к сожалению приложение было остановлено». пожалуйста, помогите мне исправить это.Мне нужно изменить имена вкладок в tabhost

Вот главный activity.java код

package com.tech2dsk.musicdsk; 

import java.util.List; 
import java.util.Vector; 

import com.tech2dsk.adapters.MyFragmentPagerAdapter; 
import com.tech2dsk.fragments.Fragment1; 
import com.tech2dsk.fragments.Fragment2; 
import com.tech2dsk.fragments.Fragment3; 
import com.tech2dsk.fragments.Fragment4; 
import com.tech2dsk.musicdsk.R; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
import android.support.v7.app.ActionBarActivity; 
import android.view.View; 
import android.widget.HorizontalScrollView; 
import android.widget.TabHost; 
import android.widget.TabHost.OnTabChangeListener; 
import android.widget.TabHost.TabContentFactory; 

public class MainActivity extends ActionBarActivity implements 
     OnTabChangeListener, OnPageChangeListener { 

    private TabHost tabHost; 
    private ViewPager viewPager; 
    private MyFragmentPagerAdapter myViewPagerAdapter; 
    int i = 0; 

    // fake content for tabhost 
    class FakeContent implements TabContentFactory { 
     private final Context mContext; 

     public FakeContent(Context context) { 
      mContext = context; 
     } 

     @Override 
     public View createTabContent(String tag) { 
      View v = new View(mContext); 
      v.setMinimumHeight(0); 
      v.setMinimumWidth(0); 
      return v; 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     i++; 

     // init tabhost 
     this.initializeTabHost(savedInstanceState); 

     // init ViewPager 
     this.initializeViewPager(); 

    } 

    private void initializeViewPager() { 
     List<Fragment> fragments = new Vector<Fragment>(); 

     fragments.add(new Fragment1()); 
     fragments.add(new Fragment2()); 
     fragments.add(new Fragment3()); 
     fragments.add(new Fragment4()); 


     this.myViewPagerAdapter = new MyFragmentPagerAdapter(
       getSupportFragmentManager(), fragments); 
     this.viewPager = (ViewPager) super.findViewById(R.id.viewPager); 
     this.viewPager.setAdapter(this.myViewPagerAdapter); 
     this.viewPager.addOnPageChangeListener(this); 

     onRestart(); 

    } 

    private void initializeTabHost(Bundle args) { 

     tabHost = (TabHost) findViewById(android.R.id.tabhost); 
     tabHost.setup(); 

     for (int i = 1; i <= 4; i++) { 

      TabHost.TabSpec tabSpec; 
      tabSpec = tabHost.newTabSpec("Tab " + i); 
      tabSpec.setIndicator("Tab " + i); 
      tabSpec.setContent(new FakeContent(this)); 
      tabHost.addTab(tabSpec); 
     } 
     tabHost.setOnTabChangedListener(this); 
    } 

    @Override 
    public void onTabChanged(String tabId) { 
     int pos = this.tabHost.getCurrentTab(); 
     this.viewPager.setCurrentItem(pos); 

     HorizontalScrollView hScrollView = (HorizontalScrollView) findViewById(R.id.hScrollView); 
     View tabView = tabHost.getCurrentTabView(); 
     int scrollPos = tabView.getLeft() 
       - (hScrollView.getWidth() - tabView.getWidth())/2; 
     hScrollView.smoothScrollTo(scrollPos, 0); 

    } 

    @Override 
    public void onPageScrollStateChanged(int arg0) { 
    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
    } 

    @Override 
    public void onPageSelected(int position) { 
     this.tabHost.setCurrentTab(position); 
    } 

} 
+0

Знаете ли вы, что используете устаревшие методы? Вместо этого вы должны использовать AppCompatActivity, Toolbar и ViewPager. –

+0

да меняет их – Rohith

ответ

0

Добавьте следующий код в XML внутри < TabWidget>

   <TextView 
       android:tag="tab0" 
       android:text="Tab 1" 
       android:background="@android:drawable/btn_star_big_on" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       /> 
      <TextView 
       android:tag="tab1" 
       android:text="Tab 2" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       /> 
      <TextView 
       android:tag="tab2" 
       android:text="Tab 3" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       /> 
+0

Я включил свою логику в mainactivity.java, поэтому внесение изменений в activity_main.xml deoesnt work – Rohith

0

Если вы хотите сделать это программно добавить этот метод к вашему FragmentPagerAdapter:

@Override 
public CharSequence getPageTitle(int position) { 
    return translateIntoName(position); //replace this with your logic 
} 

Кроме того, вместо табуста, вы shoul d использовать TabLayout.