我是碎片的新手,并且一直试图解决这个问题。我想在listview点击上更新我的片段,并且与此极为相似: Fragment in fragment do not refresh 其中左侧是列表视图,右侧是选项卡式UI。这是我的一个片段:
public static class DescriptionFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_section_description, container, false);
text = ((TextView) rootView.findViewById(R.id.description));
text.setText(Html.fromHtml(description_text));
return rootView;
}
如何调用此片段(来自主要活动内部)以便更新onCreateView并更新textview“text”?非常感谢任何帮助
注意:列表视图不是片段,只是平板电脑的单独布局文件。我唯一的片段(例如DescriptionFragment)用于标签
答案 0 :(得分:0)
我假设你想要显示listview,点击listitem,值应该更新:
如何调用此fragement(来自主要活动内部)以便更新onCreateView并更新textview“text”?
要在main活动中调用片段,你必须在side main xml文件中定义片段,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<fragment
android:id="@+id/frag_series"
android:layout_width="200dip"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize"
class="com.example.demo_fragment.MyListFragment" />
</LinearLayout>
现在扩展Listframent,然后编写代码来填充listview数据,然后点击下面的点击事件
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
String item = (String) getListAdapter().getItem(position);
DetailFragment frag = (DetailFragment) getFragmentManager().findFragmentById(R.id.frag_capt);
if (frag != null && frag.isInLayout()) {
frag.setText(getCapt(item));
}
}
然后检查条件并更新您的vaules,如下所示:
private String getCapt(String ship) {
if (ship.toLowerCase().contains("android")) {
return "Andy Rubin";
}
if (ship.toLowerCase().contains("IOS")) {
return "Steve Jobs";
}
return "???";
}
答案 1 :(得分:0)
这是你可以调用你的片段的方式。
DescriptionFragment descriptionFragment = (DescriptionFragment )
getFragmentManager().findFragmentById(R.id.yourFragmentId);
答案 2 :(得分:0)
你必须创建一个像这样的监听器Interface
public interface FragmentTransactionListener {
public void updateFragment(/*some attributes*/);
}
然后,您必须在Fragment
上实施界面并覆盖updateFragment
方法。在此方法中,您可以添加在单击列表项时将在Fragment
中执行的代码。像这样的东西
public static class DescriptionFragment extends Fragment implements FragmentTransactionListener {
...
@Override
public void updateFragment(/*some attributes*/) {
//do some stuff
}
...
在FragmentActivity
中创建片段时,获取此侦听器的实例,并在单击列表项时调用它。与此代码类似的东西
FragmentTransactionListener listener = instance of your fragment;
//in your list item you then call this
listener.updateFragment(/*some attributes*/);
希望这会有所帮助