Java 如何更新片段的文本视图;不断地;从viewpageradpater?viewpager适配器位于主片段中

Java 如何更新片段的文本视图;不断地;从viewpageradpater?viewpager适配器位于主片段中,java,android,android-fragments,android-viewpager,Java,Android,Android Fragments,Android Viewpager,我的viewpager适配器位于另一个片段(即主片段)中,即我在另一个片段中使用了viewpager。因此,viewpager适配器有两个片段 我从主片段中连续获取心率值,需要将其发送到viewpager适配器。然后viewpager适配器将此值发送到片段,并在此处更新textview //主要片段是我用更新的心率值初始化fragmentpageradapter:-((读取数据)samplePagerAdapter)。passdata(值) 用于更新值的接口:- public inter

我的viewpager适配器位于另一个片段(即主片段)中,即我在另一个片段中使用了viewpager。因此,viewpager适配器有两个片段

我从主片段中连续获取心率值,需要将其发送到viewpager适配器。然后viewpager适配器将此值发送到片段,并在此处更新textview

//主要片段是我用更新的心率值初始化fragmentpageradapter:-
((读取数据)samplePagerAdapter)。passdata(值)

用于更新值的接口:-

    public interface readingdata
{
    void passdata(int value);
}
//适配器代码:-

public class SamplePagerAdapter extends FragmentStatePagerAdapter implements readingdata {

private final Random random = new Random();
private int mSize = 2;
private int heart_rate;
FragmentManager fm;
private Map<Integer, String> mFragmentTags;

public SamplePagerAdapter(FragmentActivity activity, FragmentManager supportFragmentManager, int heart) {
    super(supportFragmentManager);
    fm = supportFragmentManager;
    mFragmentTags = new HashMap<Integer, String>();
}


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


@Override
public Fragment getItem(int position) {


    Fragment f = null;

    if (position == 0) {
        f = new MyFragment().newInstance(heart_rate);
    } else if (position == 1) {
        f = new SecondFragment();
    }

    return f;
}


@Override
public Object instantiateItem(ViewGroup container, int position) {
    Object object = super.instantiateItem(container, position);
    if (object instanceof Fragment) {
        Fragment fragment = (Fragment) object;
        String tag = fragment.getTag();
        mFragmentTags.put(position, tag);
    }
    return object;
}



public Fragment getFragment(int position) {
    Fragment fragment = null;
    String tag = mFragmentTags.get(position);
    if (tag != null) {
        fragment = fm.findFragmentByTag(tag);
    }
    return fragment;
}

@Override
public void passdata(int value) {

    heart_rate=value;
}
}


那么,我应该如何在片段内部不断更新textview呢?

在MainFragment中

   create Method 

          public void updateScreenData(String text)
 {
                    tv_heartrate.setText(text);
   } 

   in fragment and then call this method from activity
    make sure that fragment reference is not null whenever call this method
private static HeartRateListener heartRateListener;
        public static void setHeartRateListener(HeartRateListener listener){
            heartRateListener = listener;
        }
public static interface HeartRateListener{
            void onHeartRate(int yourValue);
}

    // Send your continuously updated value
        heartRateListener.onHeartRate(yourValue);
在ViewPager片段中(在onViewCreated()中)

从中获取帮助并保存引用以查看您正在充气
package com.mtg.workapp_v2.listing.wanted.add_wanted;
导入android.content.Context;
导入android.net.Uri;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.EditText;
导入android.widget.TextView;
导入com.mtg.classes.AddressView;
导入com.mtg.classes.ListingVisibilityLayout;
导入com.mtg.utils.CommonMethods;
导入com.mtg.workapp.R;
公共类WantedBasinFoFragment扩展了片段实现了View.OnClickListener{
私有静态最终字符串ARG_PARAM1=“PARAM1”;
私有静态最终字符串ARG_PARAM2=“PARAM2”;
视图碎片视图;
语境;
text查看文本并继续;
编辑文本编辑标题;
编辑文本编辑描述;
私有OnFragmentInteractionListener mListener;
//这是ahsan根据新设计添加的
ListingVisibilityLayout ListingVisibilityLayout=null;
公共WantedBasicInfoFragment(){
}
公共静态WantedBasinFoFragment newInstance(字符串param1,字符串param2){
WantedBasicInfoFragment=新的WantedBasicInfoFragment();
Bundle args=新Bundle();
args.putString(ARG_PARAM1,PARAM1);
args.putString(ARG_PARAM2,PARAM2);
fragment.setArguments(args);
返回片段;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
FragmentView=充气机。充气(R.layout.fragment\u-wanted\u-basic,container,false);
init();
返回碎片视图;
}
/********************************************************************************/
FragmentInteractionListener上的公共接口{
//TODO:更新参数类型和名称
void onFragmentInteraction(Uri);
}
/********************************************************************************/
公共void setListener(OnFragmentInteractionListener侦听器){
this.mListener=侦听器;
}
/********************************************************************************/
public void setInitValues()
{
}
/***********************************************************************************/
public void updateScreenData()
{
编辑title.setText(wantedInformation.csName);
编辑_description.setText(wantedInformation.csDescription);
}
/***********************************************************************************/
公共void init()
{
myContext=getActivity();
text\u continue=(TextView)FragmentView.findViewById(R.id.text\u continue);
edit_title=(EditText)FragmentView.findViewById(R.id.edit_title);
edit_description=(EditText)FragmentView.findViewById(R.id.edit_description);
text\u continue.setOnClickListener(此);
编辑_title.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
wantedInformation.csListingLanguage=CommonMethods.getInputLanguage(myContext);
}
@凌驾
公共无效后文本已更改(可编辑){
wantedInformation.csListingLanguage=CommonMethods.getInputLanguage(myContext);
}
});
initVisibilitySpinner();
}
/***********************************************************************************/
public void initVisibilitySpinner()
{
listingVisibilityLayout=新建listingVisibilityLayout(myContext);
视图可见性视图=(视图)FragmentView.findViewById(R.id.id\u可见性\u布局);
listingVisibilityLayout.ListingVisibilityInit(visibilityView);
}
/***********************************************************************************/
@凌驾
公共void onClick(视图){
int itemID=view.getId();
开关(项目ID){
案例R.id.text\u继续:
{
moveToNextScreen(true);
}
}
}
/***********************************************************************************/
public void moveToNextScreen(布尔值为continueclicked)
{
String csName=edit_title.getText().toString().trim();
String csDescription=edit_description.getText().toString().trim();

如果(csName.length(),我已经完成了这一步,但它在tv_心率上获得空指针异常,因为textview在片段的oncreateview()上初始化。在初始化之后,也在活动中保存对片段的引用
private static HeartRateListener heartRateListener;
        public static void setHeartRateListener(HeartRateListener listener){
            heartRateListener = listener;
        }
public static interface HeartRateListener{
            void onHeartRate(int yourValue);
}

    // Send your continuously updated value
        heartRateListener.onHeartRate(yourValue);
MainFragment.setHeartRateListener(new MainFragment.HeartRateListener() {
            @Override
            public void onHeartRate(int yourValue) {
               // Update your textview with yourValue
            }
        });
   Take Help from this and save reference to view you are inflating 

    package com.mtg.workapp_v2.listing.wanted.add_wanted;

    import android.content.Context;
   import android.net.Uri;
 import android.os.Bundle;
import android.support.v4.app.Fragment;
 import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
   import android.widget.EditText;
import android.widget.TextView;

  import com.mtg.classes.AddressView;
   import com.mtg.classes.ListingVisibilityLayout;
  import com.mtg.utils.CommonMethods;
   import com.mtg.workapp.R;


     public class WantedBasicInfoFragment extends Fragment implements           View.OnClickListener{

  private static final String ARG_PARAM1 = "param1";
   private static final String ARG_PARAM2 = "param2";

  View FragmentView ;
  Context myContext;

   TextView text_continue;
   EditText edit_title;
   EditText edit_description;

   private OnFragmentInteractionListener mListener;

//this is add by ahsan according to new design
  ListingVisibilityLayout listingVisibilityLayout = null;


  public WantedBasicInfoFragment() {
  }


  public static WantedBasicInfoFragment newInstance(String param1, String   param2) {
      WantedBasicInfoFragment fragment = new WantedBasicInfoFragment();
      Bundle args = new Bundle();
     args.putString(ARG_PARAM1, param1);
      args.putString(ARG_PARAM2, param2);
     fragment.setArguments(args);
    return fragment;
   }

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    FragmentView= inflater.inflate(R.layout.fragment_wanted_basic, container, false);
    init();
    return FragmentView;
}

/********************************************************************************/

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);

}

/********************************************************************************/

public void setListener(OnFragmentInteractionListener listener) {
    this.mListener = listener;
}

/********************************************************************************/

public void setInitValues()
{


}

/***********************************************************************************/

public void updateScreenData()
{


    edit_title.setText(wantedInformation.csName);
    edit_description.setText(wantedInformation.csDescription);



}

/***********************************************************************************/

public void init()
{
    myContext=getActivity();


    text_continue=(TextView) FragmentView.findViewById(R.id.text_continue);

    edit_title = (EditText) FragmentView.findViewById(R.id.edit_title);

    edit_description = (EditText) FragmentView.findViewById(R.id.edit_description);

    text_continue.setOnClickListener(this);

    edit_title.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) {

            wantedInformation.csListingLanguage = CommonMethods.getInputLanguage(myContext);

        }

        @Override
        public void afterTextChanged(Editable s) {
            wantedInformation.csListingLanguage = CommonMethods.getInputLanguage(myContext);
        }
    });

    initVisibilitySpinner();

}

/***********************************************************************************/

public void initVisibilitySpinner()
{
    listingVisibilityLayout = new ListingVisibilityLayout(myContext);
    View visibilityView = (View)FragmentView.findViewById(R.id.id_visibility_layout);
    listingVisibilityLayout.ListingVisibilityInit(visibilityView);

}

/***********************************************************************************/
@Override
public void onClick(View view) {

    int itemID = view.getId();

    switch (itemID) {
        case R.id.text_continue:
        {
            moveToNextScreen(true);
        }

    }
}


/***********************************************************************************/

public void moveToNextScreen(boolean isContinueClicked)
{
    String csName = edit_title.getText().toString().trim();
    String csDescription = edit_description.getText().toString().trim();

    if(csName.length() <= 0 && csDescription.toString().length() <= 0)
    {
        CommonMethods.showMessageBox("",     getResources().getString(R.string.id_please_enter_name_and_description), myContext);
        return;
    }
    else if(csName.length() <= 0)
    {
        CommonMethods.showMessageBox("", getResources().getString(R.string.id_please_enter_name), myContext);
        return;
    }
    else if(csDescription.length() <= 0)
    {
        CommonMethods.showMessageBox("", getResources().getString(R.string.id_please_enter_description), myContext);
        return;
    }
    else  if(listingVisibilityLayout.selectedProfileVisibility.csOptionID.equalsIgnoreCase("-1"))
    {
        CommonMethods.showMessageBox("", getResources().getString(R.string.id_select_visibility_option_msg), myContext);
        return;
    }


    wantedInformation.csName = csName;
    wantedInformation.csDescription = csDescription;

    wantedInformation.visibilityOption = listingVisibilityLayout.selectedProfileVisibility;

    //MH: If continue clicked then continue Button listener will be called
    //MH: If only tick is clicked in Edit Mode then onUpdate listener will be called
    //MH: and data will be updated before sent to api
    //MH: The below statements are repeated in all fragments of Wanted
    if(isContinueClicked)
    mListener.continueButtonPressed(wantedInformation);
    else
        mListener.onUpdate(wantedInformation);
}