Android-通过“编辑文本"选项卡式片段之间的元素值 [英] Android - Pass "edit text" element value between tabbed fragments

查看:47
本文介绍了Android-通过“编辑文本"选项卡式片段之间的元素值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个活动,其中包含多个滑动式选项卡式片段.每个片段都有一些复选框,编辑文本和切换字段.我想要的是浏览所有选项卡,编辑字段的状态,然后在最后一个选项卡上整理所有元素中的信息,并将这些详细信息保存到数据库中.

I have an activity with multiple swipe tabbed fragments. Each fragment has some check-boxes, edit text and switch fields. What I want is to navigate through all the tabs, edit the state of the fields then on last tab to collate the information within all the elements and save these details into a database.

我的问题是我不知道如何保存这些元素的值并将它们传递给我的最后一个选项卡以进行存储.

My problem is that I don't know how to save these elements values and pass them to my last tab in order to be stored.

我是Android应用程序的新手,因此非常感谢您提供任何提示或答案.

I am quite a newbie with Android apps so any hint or answer would be very much appreciated.

这是到目前为止的代码外观:

Here is how code looks so far:

活动:

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"的文本值?

Assuming that Tab Fragment 2 is my last tab, how could I retrieve here the text value for "mBreedName" stored into Tab Fragment 1?

谢谢!

推荐答案

您可以将值存储在活动中,并使用回调来更新和查询它们.

You can store the values in your activity and use a callback to update and query them.

尝试一下:

关于您的活动:

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接口:

The ActivityCallback interface:

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;
    }
}

这篇关于Android-通过“编辑文本"选项卡式片段之间的元素值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆