EditText字段显示不同选项卡上的数据

时间:2013-07-24 03:33:59

标签: android android-edittext

我的应用程序存在一些非常奇怪的问题。我有一个EditText元素,让我们在每个选项卡的重用片段中调用它。每次启动应用程序时,当我单击一个将文本发送到输出显示的按钮时,我会看到以下初始行为。我不使用系统键盘,只有我的按钮发送到显示器。

考虑这一点的最佳方式就像带有标签的网络浏览器,您可以单独编辑每个标签中的URL,而其他两个部分中的按钮提供输入。它不是一个网络浏览器,但这个比喻有效。

enter image description here

  • 不要点击任何内容 - >在B标签中绘制的文字
  • 点击B - >在C标签中绘制的文字
  • 点击C - >在C标签中绘制的文字
  • 点击B - >点击C - > App崩溃

我可能遇到了fencepost错误,但我不确定。我可以在A的输出中绘制文字,但只需要点击一两次。

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

    midPager = (ViewPager) findViewById(R.id.function_container);
    topPager = (ViewPager) findViewById(R.id.top_container);
    midPagerAdapter = new midPageAdapter(getFragmentManager());
    midPager.setAdapter(midPagerAdapter);

    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

    TabsAdapter topTabsAdapter = new TabsAdapter(this,topPager);
    topTabsAdapter.addTab(actionBar.newTab().setText("1"), 
                          TopFragment.class, null);
    topTabsAdapter.addTab(actionBar.newTab().setText("2"), 
                          TopFragment.class, null);
    topTabsAdapter.addTab(actionBar.newTab().setText("3"), 
                          TopFragment.class, null);

    if (savedInstanceState != null) {
        actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab",0));
    }
}

在我管理标签的功能中,这就是我所拥有的:

public static class TabsAdapter extends FragmentPagerAdapter
implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
    private final Context mContext;
    private final ActionBar mActionBar;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();

    static final class TabInfo {
        private final Class<?> clss;
        private final Bundle args;

        TabInfo(Class<?> _class, Bundle _args) {
            clss = _class;
            args = _args;
        }
    }

    public TabsAdapter(Activity activity, ViewPager pager) {
        super(activity.getFragmentManager());
        mContext = activity;
        mActionBar = activity.getActionBar();
        mViewPager = pager;
        mViewPager.setAdapter(this);
        mViewPager.setOnPageChangeListener(this);
    }

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        mActionBar.addTab(tab);
        notifyDataSetChanged();
    }

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

    @Override
    public Fragment getItem(int position) {
        TabInfo info = mTabs.get(position);
        return Fragment.instantiate(mContext, info.clss.getName(), info.args);
    }

    @Override
    public void onPageScrolled(int position, float positionOffset,
                               int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
        mActionBar.setSelectedNavigationItem(position);
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        Object tag = tab.getTag();

        for (int i = 0; i < mTabs.size(); i++)
        {
            if (mTabs.get(i) == tag)
            {
                setActiveMap(i);
                mViewPager.setCurrentItem(i);
            }
        }
    }
}

在我的可重用片段中,我有这个用于我的OnCreate函数。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.top_fragment, container, false);
    Foobar active = Container.getActiveMap();
    active.editLine = (EditText) v.findViewById(R.id.display);
    active.editLine.setCursorVisible(false);
    active.editLine.addTextChangedListener((TextWatcher) this);
    ((EditText) v.findViewById(R.id.display)).setOnClickListener(this);
    return v;
}

有助于我调试此问题的一个问题是如何在选项卡中重用的片段中调试EditText? EditText小部件使用哪些数据来区分自己与制表符?我尝试了各种.tostring()函数但没有成功。

更理想的解决方案是您在此代码中发现的一个简单错误。谢谢你的帮助。

我们可能有3个独立的片段,但它们都具有相同的配置,但这看起来不必要的丑陋。

0 个答案:

没有答案