android - 从 tablayout 中的每个选项卡获取 EditText 的值

标签 android android-sqlite android-tablayout

我需要有关如何从 tablayout 中的编辑文本检索用户输入值的帮助。我有 4 个选项卡,每个选项卡都有相同的 editText 小部件,这意味着我只实现了一个 edittext View 。问题是,如果我在每个 editText 中放置一个值,我不知道如何检索它们,因为考虑到我只在布局中实现了一次,我不知道如何找到每个 editText 的位置。我什至需要将它们放入我的 sqlite 数据库中。有人会指导我吗。谢谢。

My_Notes_Add_Main.java

package com.zaid.recyclerviewsqlite.addNotes;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import com.zaid.recyclerviewsqlite.R;

public class My_Notes_Add_Main extends AppCompatActivity implements View.OnClickListener {

    private final int numOfPages = 4; //viewpager has 4 pages
    private final String[] pageTitle = {"Terms", "Definition", "Syntax", "Code"};
    private ImageButton addNew;
    private EditText terms, def, syn, code;

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



        addNew = (ImageButton)findViewById(R.id.addNew);
        addNewTerms();

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1);
        setSupportActionBar(toolbar);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);

        for (int i = 0; i < numOfPages; i++) {
            tabLayout.addTab(tabLayout.newTab().setText(pageTitle[i]));
        }

        //set gravity for tab bar
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PagerAdapter adapter = new My_Notes_Add_MyPagerAdapter(getSupportFragmentManager(), numOfPages);

        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(onTabSelectedListener(viewPager));
    }

    private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager pager) {
        return new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                pager.setCurrentItem(tab.getPosition());
            }

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

            }

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

            }
        };
    }

  /**  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my_notes_add_main_menu, menu);        
        return true;
    } */

    public void addNewTerms(){
        addNew.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Toast.makeText(getApplicationContext(), "Add Click", Toast.LENGTH_SHORT).show();
            }

    });
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }






}

My_Notes_Add_MyPagerAdapter.java

package com.zaid.recyclerviewsqlite.addNotes;

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

public class My_Notes_Add_MyPagerAdapter extends FragmentStatePagerAdapter {
    int numOfTabs;

    public My_Notes_Add_MyPagerAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this.numOfTabs = numOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

       return My_Notes_Add_TabFragment.getInstance(position);
    }

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

My_Notes_Add_TabFragment.java

package com.zaid.recyclerviewsqlite.addNotes;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.zaid.recyclerviewsqlite.R;

public class My_Notes_Add_TabFragment extends Fragment {

    private int position;
    private TextView content;
    private ImageView image;

    public static Fragment getInstance(int position) {
        My_Notes_Add_TabFragment f = new My_Notes_Add_TabFragment();
        Bundle args = new Bundle();
        args.putInt("position", position);
        f.setArguments(args);
        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //get data from Argument
        position = getArguments().getInt("position");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.my_notes_add_tab_fragment, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);


        content = (EditText) view.findViewById(R.id.textView);

    }




}

最佳答案

首先尝试为您的 View 寻呼机设置偏移量限制

viewPager.setOffscreenPageLimit(4);

以这种方式,您的 fragment 将只创建一次。

然后在您的主要 Activity 中创建一个这样的 fragment 列表

ArrayList<Fragment> mFragmentList = new ArrayList<>();

将您的寻呼机适配器更改为此

class PagerAdapter extends FragmentPagerAdapter {

private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> fragmentTitleList = new ArrayList<>();

public PagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
}

public void addFragment(Fragment fragment, String title) {
     fragmentList.add(fragment);
     fragmentTitleList.add(title);
}

@Override
public Fragment getItem(int position) {
      Fragment fragment = fragmentList.get(position);
      Bundle bundle = new Bundle();
      // add any data if you want.
      bundle.putInt("any_data", "any_data");
      fragment.setArguments(bundle);
      return fragment;
}

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

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

现在像这样将 fragment 添加到适配器。

public class My_Notes_Add_Main extends AppCompatActivity implements View.OnClickListener {

private final int numOfPages = 4; //viewpager has 4 pages
private final String[] pageTitle = {"Terms", "Definition", "Syntax", "Code"};
private ImageButton addNew;
private EditText terms, def, syn, code;

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



    addNew = (ImageButton)findViewById(R.id.addNew);
    addNewTerms();

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1);
    setSupportActionBar(toolbar);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);

    for (int i = 0; i < numOfPages; i++) {
        tabLayout.addTab(tabLayout.newTab().setText(pageTitle[i]));
    }

    //set gravity for tab bar
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);

    PagerAdapter pagerAdapter= new My_Notes_Add_MyPagerAdapter(getSupportFragmentManager());
Fragment fragment = My_Notes_Add_TabFragment .getInstance();
pagerAdapter.addFragment(fragment , pageTitle[0]);
mFragmentList.add(fragment);

Fragment fragment = My_Notes_Add_TabFragment .getInstance();
pagerAdapter.addFragment(fragment , pageTitle[1]);
mFragmentList.add(fragment);

Fragment fragment = My_Notes_Add_TabFragment .getInstance();
pagerAdapter.addFragment(fragment , pageTitle[2]);
mFragmentList.add(fragment);

Fragment fragment = My_Notes_Add_TabFragment .getInstance();
pagerAdapter.addFragment(fragment , pageTitle[3]);
mFragmentList.add(fragment);

    viewPager.setAdapter(adapter);
    viewPager.setOffscreenPageLimit(4);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(onTabSelectedListener(viewPager));
}

现在转到您的 fragment 并更改 TextView 的状态

public TextView content;

现在遍历数组列表并通过对象获取 textView,然后您可以访问它的值。

希望对你有所帮助。

关于android - 从 tablayout 中的每个选项卡获取 EditText 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35981649/

相关文章:

sql - 替换 SQLITE TEXT 记录中的特殊字符

java - 如何在 Android 中更改选定的选项卡标题 textSize

android - FragmentManager 在使用方法 setOffscreenPageLimit() 后已经在执行事务

java - 从 SQLite Android Studio java 中检索日期

android - 如何使用 SugarORM 在数据库中创建另一个表

android - 带有错误颜色标题栏的 AppCompat 对话框主题 - 错误?

android - Volley, ImageLoader.ImageListener 中的 onResponse 调用了多少次

java - 如何更改TabLayout中的字体大小?

android - 当 LiveData<MVoice> 在 Android Studio 中的双向数据绑定(bind)中更改时,如何重置 LiveData<Boolean>?

java - 自定义 ScrollView 不滚动