2017-01-29 6 views
0

ここではMainActivityのコードである:ここアンドロイド - ViewPager - 第2のタブが変更された更新UI最初のタブに(スワイプ検出)

import android.app.ActionBar; 
import android.content.Context; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 

import android.annotation.SuppressLint; 
import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.ActionBar.TabListener; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 

@SuppressLint("NewApi") 
public class MainActivity extends FragmentActivity implements TabListener { 
    private ViewPager viewPager; 
    private TabPagerAdapter tabPagerAdapter; 
    private ActionBar actionBar; 
    private String[] tabNames = { "Main", "Settings", "Rules" }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     tabPagerAdapter = new TabPagerAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(tabPagerAdapter); 
     actionBar = getActionBar(); 
     actionBar.setHomeButtonEnabled(true); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     for (int i = 0; i < 3; i++) { 
      actionBar.addTab(actionBar.newTab().setText(tabNames[i]) 
        .setTabListener(this)); 
     } 
     viewPager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int postion) { 
       actionBar.setSelectedNavigationItem(postion); 
       if(postion==1){ 
        View view = viewPager.getChildAt(postion); 
        set_lang(view); 
       } 
       if(postion==0){ 
        View view = viewPager.getChildAt(postion); 
        set_flag(view); 
       } 


      } 

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

      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 

      } 
     }); 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
// TODO Auto-generated method stub 

    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
// TODO Auto-generated method stub 

    } 

    public void set_lang(View view){ 
     MainFrame.preferences = getSharedPreferences("flag", Context.MODE_PRIVATE); 
     MainFrame.editor = MainFrame.preferences.edit(); 

     RadioGroup radio = (RadioGroup)view.findViewById(R.id.radioGroup); 
     int radioButtonID = radio.getCheckedRadioButtonId(); 
     RadioButton radioBut = (RadioButton)view.findViewById(radioButtonID); 
     String lang = (String) radioBut.getTag(); 

     MainFrame.editor.putString("lang", lang); 
     MainFrame.editor.apply(); 
    } 

    public View set_flag(View view) { 
     Button btn_flag = (Button)view.findViewById(R.id.btn_flag); 
     MainFrame.preferences = getSharedPreferences("flag", Context.MODE_PRIVATE); 
     String lang = MainFrame.preferences.getString("lang",""); 
     if(lang.equals("english")){ 
      btn_flag.setBackgroundResource(R.drawable.eng_flag); 
     } 
     if(lang.equals("russian")){ 
      btn_flag.setBackgroundResource(R.drawable.rus_flag); 
     } 
     if(lang.equals("german")){ 
      btn_flag.setBackgroundResource(R.drawable.german_flag); 
     } 

     return view; 
    } 
} 

はTabPageAdapterのコードである:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class TabPagerAdapter extends FragmentPagerAdapter { 

    public TabPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     switch (arg0) { 
      case 0: 
       return new MainFrame(); 
      case 1: 
       return new Settings(); 
      case 2: 
       return new Rules(); 
      default: 
       break; 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

私が知っています、 onPageSelected(int postion)メソッドを変更してページの変更をキャッチする必要がありますが、動作しません。現在は何も変えていないし、3番目のタブから2番目のアプリに切り替えるとクラッシュする。 enter image description here わかりやすくするために、ラジオボタン(ラジオグループ)を使用して、ユーザーが第2タブの言語を切り替えると、最初のタブのボタンの背景を変更したいと思います。 スクリーンショットをご覧ください。

+0

本当にあなたの問題が何でありますか?あなたは少し具体的でしょうか? –

+0

はクラッシュログを提供していますか? – rafsanahmad007

+0

ユーザーが第2言語で言語を変更したときに、最初のタブでフラグを変更します。 –

答えて

2

これは、フラグメントの方法public void setUserVisibleHint(boolean isVisibleToUser)を使用してこれを達成できます。

ユーザは、好みやときにユーザスイッチ主素片にisVisibleToUserをチェックしながら、次にから値を読み出すsetUserVisibleHint方法内側嗜好から新たに選択された値の値を読み出す設定フラグメントストア内の何かを変更設定を更新し、更新された値で背景を変更します。

1

@Nagesh Jatagond、アドバイスありがとう、私は最終的に解決策を見つける!

Settings.java:

@Override 
    public void setUserVisibleHint(boolean visible) 
    { 
     super.setUserVisibleHint(visible); 
     View v = getView(); 
     if (!visible && v!=null){ 
      set_lang(v); 
     } 
    } 

Main.java:

@Override 
    public void setUserVisibleHint(boolean visible) 
    { 
     super.setUserVisibleHint(visible); 
     View v = getView(); 
     if (!visible && v!=null){ 
      set_flag(v); 
     } 
     if (visible && v!=null){ 
      set_flag(v); 
     } 
    } 
関連する問題