2017-09-03 26 views
0

我有ALr.java類和FragHandler。 FragHandler有Tablayout和viewpager。 ALR和FragHandler代碼在下面寫成。我想通過調用activatealert方法來打開FragHandler中第三個選項卡的Settings選項卡,從ALR即rl.setonclicklisterner中單擊。Android - 打開從片段中的對話框發射的第三個選項卡

MyFragHandler類

public class FragHandler extends AppCompatActivity 
    TabLayout tabLayout; 
    Toolbar customtoolbar; 
    SharedPreferences sharedPreferences; 

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

     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 



     tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
     tabLayout.addTab(tabLayout.newTab().setText("1")); 
     tabLayout.addTab(tabLayout.newTab().setText("2")); 
     tabLayout.addTab(tabLayout.newTab().setText("Settings")); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 




     final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     final AlsViewChanger adapter = new AlsViewChanger(getSupportFragmentManager(), tabLayout.getTabCount()); 
     viewPager.setAdapter(adapter); 

     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 


    } 





} 

,並從那裏我米試圖打開標籤我ALR.java 3.

public class ALR extends Fragment { 


    TextView rl, 




    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) throws NullPointerException { 
     View view = inflater.inflate(R.layout.ar, container, false); 



     rl = (TextView) view.findViewById(R.id.reto); 


       rl.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


        activatealert(); 

       });  
    public void activatealert() { 
     MaterialDialog activateald = new MaterialDialog.Builder(getActivity()) 
       .content("In order to use these services, please click settings and set appropriate options to activate Where R U feature.") 
       .title("Activate Where R U") 
       .positiveColor(Color.BLUE) 
       .negativeColor(Color.RED) 
       .positiveText("Settings") 
       .negativeText("Cancel") 
       .onPositive(new MaterialDialog.SingleButtonCallback() { 
        @Override 
        public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { 
         Intent intent = new Intent(getActivity(),FragHandler.class); 
         intent.putExtra("Settings",2); 
         startActivity(intent); 

        } 
       }) 
       .show(); 
    } 
} 

它打開所需的選項卡式activitiy但第一個標籤不三分之一。請指導。

回答

1

編輯基於您的代碼:

刪除OnTabSelectedListener,你不需要它。

只需添加

tabLayout.setupWithViewPager(viewPager); 

下面是完整的代碼:

public class FragHandler extends AppCompatActivity 
    TabLayout tabLayout; 
    Toolbar customtoolbar; 
    SharedPreferences sharedPreferences; 

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

     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

     tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
     tabLayout.addTab(tabLayout.newTab().setText("1")); 
     tabLayout.addTab(tabLayout.newTab().setText("2")); 
     tabLayout.addTab(tabLayout.newTab().setText("Settings")); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

     final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     final AlsViewChanger adapter = new AlsViewChanger(getSupportFragmentManager(), tabLayout.getTabCount()); 
     viewPager.setAdapter(adapter); 

     tabLayout.setupWithViewPager(viewPager); 
     int tabToSelect = getIntent().getIntExtra("Settings」, 0); 
     viewPager.setCurrentItem(tabToSelect); 
    } 

} 

請檢查

int tabToSelect = getIntent().getIntExtra("Settings」, 0); 

,如果你想這樣做,我只是假設。如果你不需要它,請改變它。

很難沒有太多的細節來回答,但這裏是基於假設我的一些建議:

1)要啓動它有多個選項卡的活動FragHandler。 TabLayout與ViewPager相關聯。所以在這種情況下,在將適配器設置爲ViewPager後,請撥打viewPager.setCurrentItem(2)。如果你只有標籤,那麼你可以試試tabLayout.getTabAt(2).select()。這應該會觸發OnTabSelectedListener,您可能已經有用於替換片段的代碼。

2)有對話的片段在同一個TabLayout裏面,你要求的第三個標籤是。在這種情況下,把下面的代碼中設置按鈕的onClick:

// If ViewPager, then make it public in YourActivity 
((YourActivity)getActivity()).viewPager.setCurrentItem(2); 

// If TabLayout without ViewPager, then also make it public 
((YourActivity)getActivity()).tabLayout.getTabAt(2).select(); 

和後期儘可能多的細節可能讓你可以得到正確的答案

+0

我更新體的詳細信息。請閱讀並指導。因爲1或2的情況都沒有幫助,因爲我沒有在我調用標籤3的ALR.java類中使用tablayout和viewpager。 – Panache

+0

@Panache如果我理解正確,則情況1是您需要的。您正在通過傳遞「設置」標誌從ALR.java開始FragHandler活動。現在在FragHandler的onCreate中,你可能正在初始化你的ViewPager&TabLayout。只需在該代碼下面,嘗試通過添加一行來檢查,如 viewPager.setCurrentItem(2);這將以編程方式製作第三個選項卡。 –

+0

我增加了兩個班,更好的信息,請看看 – Panache

相關問題