2017-03-28 4 views
0

私は複数のスワイプタブ付きフラグメントでアクティビティを持っています。各フラグメントにはいくつかのチェックボックス、テキストの編集、フィールドの切り替えがあります。私が望むのは、すべてのタブをナビゲートし、最後のタブのフィールドの状態を編集して、すべての要素内の情報を照合し、これらの詳細をデータベースに保存することです。Android - タブ付きフラグメント間の "編集テキスト"要素の値を渡す

私の問題は、これらの要素の値を保存し、最後のタブに保存する方法を知らないことです。

私はAndroidアプリの初心者ですので、ヒントや回答は非常に高く評価されます。ここで

コードは、これまでどのように見えるかです:

活動:

public class IconTextTabsActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 
private int[] tabIcons = { 
     R.drawable.ic_tab_favourite, 
     R.drawable.ic_tab_call, 
     R.drawable.ic_tab_contacts, 
     R.drawable.ic_vector_test 
}; 


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

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    setupTabIcons(); 

    Bundle b = getIntent().getExtras(); 
    String id = b.getString("id"); 

    Toast.makeText(this, id, Toast.LENGTH_LONG).show(); 

} 

private void setupTabIcons() { 
    tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
    tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
    tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
    tabLayout.getTabAt(3).setIcon(tabIcons[2]); 
    tabLayout.getTabAt(4).setIcon(tabIcons[3]); 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFrag(new OneFragment(), "ONE"); 
    adapter.addFrag(new TwoFragment(), "TWO"); 
    adapter.addFrag(new ThreeFragment(), "THREE"); 
    adapter.addFrag(new FourFragment(), "FOUR"); 
    adapter.addFrag(new FiveFragment(), "FIVE"); 
    viewPager.setAdapter(adapter); 
} 

@Override 
public boolean onSupportNavigateUp() { 
    onBackPressed(); 
    return true; 
} 


@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFrag(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

タブフラグメント1

public class OneFragment extends Fragment { 

private EditText mBreedName; 

public OneFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_one, container, false); 

    mBreedName = (EditText) v.findViewById(R.id.addName); 

    return v; 
} 

タブフラグメント2

public class TwoFragment extends Fragment { 

public TwoFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_two, container, false); 

    return v; 
} 

タブフラグメント2が最後のタブであると仮定して、タブフラグメント1に格納されている「mBreedName」のテキスト値をここで取得するにはどうすればよいですか?

ありがとうございます!

答えて

0

アクティビティに値を格納し、コールバックを使用してその値を更新およびクエリできます。

これを試してください:あなたの活動に

を:

public class IconTextTabsActivity extends AppCompatActivity implements ActivityCallback{ 
    private String mBreedTextName = ""; 
    ... 
    @Override 
    public void onEditTextChange(String text) { 
     this.mBreedTextName = text; 
    } 

    @Override 
    public String getEditTextName() { 
     return mBreedTextName; 
    } 
} 

ActivityCallbackインタフェース:

public interface ActivityCallback { 

    void onEditTextChange(String text); 

    String getEditTextName(); 
} 
あなたのフラグメントのその後

public class OneFragment extends Fragment { 
    ... 
    private ActivityCallback callback;  

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     callback = (ActivityCallback) context; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_one, container, false); 
    mBreedName = (EditText) v.findViewById(R.id.addName); 
    Button b = v.findViewById(R.id.accept_button); 

    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       callback.onEditTextChange(mBreedName.getText().toString()); 
      } 
     }); 
     return v; 
    } 

} 

そして上と同じセコ断片:

public class TwoFragment extends Fragment { 

    ... 
    private ActivityCallback callback;  
    private String text; 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     callback = (ActivityCallback) context; 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     // Inflate the layout for this fragment 
     View v = inflater.inflate(R.layout.fragment_two, container, false); 
     text = callback.getEditTextName(); 
     return v; 
    } 
} 
+0

多くのありがとうジョナサン、それは動作します! :) –

+0

もう1つの質問ですが、そのボタンを追加しないでコールバックをトリガするために "OnSwipeTouchListener"を添付することは可能ですか? –

+0

たぶん、私はそのリスナーを使ったことはありませんでしたが、おそらく、あなたが "onPause()"というフラグメントメソッドでコールバックをトリガーすることができると思います。 –

関連する問題