![](/img/trans.png)
[英]How to refresh recyclerview adapter when data changes in other fragment?
[英]Refresh fragment when other fragment changes the first's fragment model
我想在視圖分頁器更改為該片段時刷新它。
package com.mcivisoft.rcbeam;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import com.mcivisoft.rcbeam.R;
public class FragBeamRec extends Fragment {
public static FragBeamRec newInstance() {
FragBeamRec fragment = new FragBeamRec();
return fragment;
}
public FragBeamRec() {}
private EditText tasss = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.fragment_frag_beam_rec, container, false);
tasss = (EditText)v.findViewById(R.id.txttttaasss);
tasss.setText(String.valueOf(var.asspass));
ActivityBeamRec.mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 2) {
Fragment frg = null;
frg = getFragmentManager().findFragmentByTag("FragBeamRec");
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(frg);
ft.attach(frg);
ft.commit();
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageScrollStateChanged(int state) {}
});
return v;
}
}
這行不通,誰能告訴我原因。 我一直在嘗試刷新此片段三天,請幫助。
我希望刷新的原因是我在同一活動(選項卡式活動)中得到了另一個片段,在第一個片段中,有一個按鈕進行一些計算並將結果放入全局變量中,並且該片段顯示了公共變量,並且由於它是在單擊按鈕之前創建的,因此顯示0.0
,這就是為什么我要刷新它以便顯示全局變量的當前值的原因。
除了刷新片段以外,您應該只刷新視圖。 有關教程,請參見有關片段之間通信的指南( http://developer.android.com/training/basics/fragments/communicating.html )。 這里有相同的概念。
基本上,您將希望像這樣在按鈕的OnClickListener
內通知FragBeamRec
片段計算已完成
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int result = 4 + 4;
fragBeamRec.onCalculationComplete(result);
}
});
帶接口
public interface OnCalcComplete {
void onCalculationComplete(int result);
}
然后在片段中有類似
public class FragBeamRec extends Fragment implements OnCalcComplete {
public void onCalculationComplete(int result) {
textView.setText(result);
}
...
}
我通過替換private EditText tasss = null;
通過public static EditText tasss = null;
這樣,我可以從任何地方訪問它。在單擊偵聽FragBeamRec.tasss.setText(String.valueOf(var.asspass));
中的按鈕上FragBeamRec.tasss.setText(String.valueOf(var.asspass));
我認為您的整個實施過程都很不穩定
您在ActivityBeamRec內部的ViewPager中具有FragBeamRec。
這樣一來,如果ViewPager內有4個片段,則可能在所述數據模型發生更改時甚至從未創建FragBeamRec。
最好的實現是從ActivityBeamRec刷新所有內容。 在活動內部注冊viewPagerChangeListener。 您還可以綁定模型更改時在ActivityBeamRec活動上觸發的偵聽器接口。
您現在可以使用以下方式從活動中獲取片段
private Fragment getFragmentFromPager(int index) {
return getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.parentViewPager + ":" + index);
}
通過在viewPager中傳遞Fragment索引位置,您將獲得一個Fragment對象,您可以使用該對象執行任何形式的刷新
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.