在自定义视图中访问片段引用

我有一个场景,其中一个片段有一个customview(通过扩展视图类)内的布局。 自定义视图必须访问一些片段的方法。 但我无法在自定义视图中获取片段引用。 此外,我无法从自定义视图(这是片段的孩子)访问片段,

根据android碎片:我们在视图的构造函数中获取上下文。 这个上下文是活动的实例。 但是没有办法获得托pipecustomview的片段的引用。

请让我知道如何访问自定义视图内的片段。

编辑:

添加代码以更好地理解我的问题:

MyFragment .java

公共类MyFragment扩展片段{

int selectedOptionIndex; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //get value of selectedOptionIndex from bundle and save it to this.selectedOptionIndex; } @Override public void onAttach(Activity activity) { super.onAttach(activity); this.activity = activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.myFragmentview, container, false); return view; 

//i can access views from fragment, but not vice versa. }

}

myFragmentview.xml

  <com.test.CustomView android:id="@+id/myCustomView" android:layout_width="fill_parent" android:layout_height="40dip" layout_weight="1" /> 

公共类CustomView延伸视图{

 private MyActivity context; /** Default Constructor */ public EasCalWeekViewHeader1(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = (MyActivity) context; 

// Now using context, we can access activity insatnce inside this customView and can call any method of activity instance. //But we cannot do this for fragments. There is not way to access parent fragment at this point. I cannot access selectedOptionIndex and use it to set in this view. //if view can access the parent activty, then it should also have an access to parent fragment.
}

 /** Default Constructor */ public EasCalWeekViewHeader1(Context context, AttributeSet attrs) { super(context,attrs); this.context = (MyActivity) context; } } 

}

Solutions Collecting From Web of "在自定义视图中访问片段引用"

好。 用你自己的话说:

根据android碎片:我们在视图的构造函数中获取上下文。 这个上下文是活动的实例。 但是没有办法获得托pipecustomview的片段的引用。

所以,上下文就是这个活动的实例,对吗? 现在从这个活动的上下文,我相信你可以得到你的片段的引用,如果你已经分别使用findFragmentByTag(String tag)findFragmentById(int id)提供了一个string标签名称或id的片段。

 context.getFragmentManager().findFragmentByTag("tag_of_frag_you_are_trying_to_access"); 

HTH。

我find解决办法,并与我一起尝试

在Custom视图的构造函数中获取上下文的引用并将其转换为Activity类

 private Activity activity ; public EasCalWeekViewHeader1(Context context){ activity = (Activity) context ; } 

在你想调用Fragment方法的方法中

 yourFragment a= activity.getFragmentManager().findFragmentById(R.id.fragment1); a.YourMethod(); 

使用视图的构造函数来传递片段本身没有它的活动。 这是一个深层复制,所以你将能够从视图中访问你的片段。

 public class YourView extends View { Fragment yourfragmentinside; public YourView(Fragment inputyourfragment) { this.yourfragmentinside = inputyourfragment } 

}

不要担心它是相同的碎片 – 如果你不使用新的…() –