从活动或片段外部访问多个布局视图

时间:2015-07-27 20:20:29

标签: android android-layout android-fragments

我是Android新手,我无法找到解决问题的方法。我已经进行了广泛的搜索,但似乎无法找到满足我特定需求的解决方案。

我有一个应用程序,主要活动有9个不同的片段。其中8个分为两个ViewPagers。我有一个单独的CalculateX类,它不是一个活动或片段。其中两个片段有一堆EditTexts,另外七个片段有一堆TextViews。

在CalculateX类中,我需要立即从editTexts获取用户输入的信息,进行一些计算,然后从各种其他片段将它们返回到TextViews。

我没有想出一种方法来获取对各种布局的引用。我考虑过在每个片段类中创建一个引用变量,但是在做了一些阅读后,它似乎可能会导致内存问题。

非常感谢任何帮助。感谢。

更新7-28-15

好的,所以我一直在努力解决这个问题。包含editTexts的Fragment1现在有一个帮助沟通的界面。

    public interface OnDisplayArmy {
    public void onReceivedCount(String count);
}

在该片段中,我还有一个addTextChangedListener

  EditText barbText = (EditText) v.findViewById(R.id.barbarian_amount);
    barbText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) { }

        @Override
        public void afterTextChanged(Editable s) {
            CalculateAndDisplay testDisplay = new CalculateAndDisplay(v);
            String newCount = testDisplay.CalculateArmy();
            mDisplayCallback.onReceivedCount(newCount);
            Log.d("Distribute", "got to afterTextChanged");
        }
    });

这将触发我的计算类

public class CalculateAndDisplay {
View elixFragmentView;

public CalculateAndDisplay(View elixView) {
    elixFragmentView = elixView;
}

public String CalculateArmy() {
    EditText barbarianValue = (EditText) elixFragmentView.findViewById(R.id.barbarian_amount);
    String barbarianCount = String.valueOf(barbarianValue.getText());
    Log.d("Distribute", "got to CalculateArmy");
    return barbarianCount;
}
}

该类将执行计算并将结果返回给Fragment1 addTextChangedListener。然后mDisplayCallback.onReceivedCount()获取该值并将其传递给mainActivity。 MainActivity实现上述接口并添加此方法

  @Override
public void onReceivedCount(String count) {
    ElixBarracksOne elixBarracksOne = (ElixBarracksOne) getSupportFragmentManager().findFragmentByTag("elix_barracks_one");
    Log.d("Distribute", "got to onReceivedCount");
    if (elixBarracksOne != null) {
        elixBarracksOne.setArmyCount(count);
        Log.d("Distribute", "got to onRecievedCount if statement");
    }
}

第二次更新 我使用

修复了我以前的问题
ElixBarracksOne elixBarracksOne = (ElixBarracksOne) getSupportFragmentManager().findFragmentByTag(
            "android:switcher:"+R.id.barracks_pager+":0");

而不是上面的代码。这允许我与Fragment2进行通信并设置文本,但是一旦我开始浏览寻呼机中的片段,它就会在我回来时消失。我假设这是因为片段被销毁然后重新创建。

所以现在我需要知道如何从onReceivedCount方法中保存TextView值。任何帮助将不胜感激。

第三次更新

好的,所以我意识到我无法与不在视图中的片段进行通信。所以在这一点上,我正在考虑将信息存储到数据库中,并从那里拉出碎片。不确定是否有可以附加到数据库更新时将触发的片段的侦听器

0 个答案:

没有答案