0

我是 Fragments 的新手,几天来一直在尝试解决这个问题。我正在尝试在单击列表视图时更新我的​​片段,并且与此非常相似: 片段中的片段不刷新 左侧的列表视图和右侧的选项卡式 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)用于选项卡

4

3 回答 3

0

我假设您要显示 listview 并单击 listitem,值应该更新:

我如何调用这个片段(从主活动内部),以便更新 onCreateView 并更新 textview 'text'?

要在主要活动中调用片段,您必须在侧主 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));
}
}

然后检查条件并更新您的值,如下所示:

private String getCapt(String ship) {
if (ship.toLowerCase().contains("android")) {
return "Andy Rubin";
}
if (ship.toLowerCase().contains("IOS")) {
return "Steve Jobs";
}
return "???";
}
于 2013-07-01T05:21:34.683 回答
0

这是您可以调用片段的方式。

DescriptionFragment  descriptionFragment = (DescriptionFragment ) 
getFragmentManager().findFragmentById(R.id.yourFragmentId);
于 2013-07-01T05:21:57.577 回答
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*/);

希望这可以帮助

于 2013-07-01T05:23:18.377 回答