我是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值。任何帮助将不胜感激。
第三次更新
好的,所以我意识到我无法与不在视图中的片段进行通信。所以在这一点上,我正在考虑将信息存储到数据库中,并从那里拉出碎片。不确定是否有可以附加到数据库更新时将触发的片段的侦听器