0

我正在处理 Fragment-ListView 并在图像中显示输出。每次单击都会更改 Fragment2 的 TextView。直到现在还可以。

Fragmetn1 用于 listView,frag2 用于 DifferentView。

现在我想通过单击更改 fragment2 中的布局。例如,当单击 item2 时,fragment2 中设置了带有 textView 的布局。现在选择item3,Button的不同布局应该设置为fragment2。

我的 getView 代码在这里。

public void onListItemClick(ListView l, View v, int position, long id) {

        DetailFrag frag = (DetailFrag) getFragmentManager().findFragmentById(R.id.frag_detail);

        if (frag != null && frag.isInLayout()) {
            frag.setText("item "+position+" selected");
        }
    }

有没有其他方法可以做到这一点,PLZ也有帮助。

任何建议将不胜感激。在此先感谢。

在此处输入图像描述

4

3 回答 3

0

试试下面的方法

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

那么您需要使用以下语法将您的片段添加到此片段事务中。

fragmentTransaction.replace(R.id.detailFragment, layout1);

最后你必须提交你的交易。否则更改将不会持续。

fragmentTransaction.commit();
于 2013-05-03T13:30:40.857 回答
0

在我看来,您应该使用具有不同布局的不同片段并使用 FragmentTransaction 替换现有的片段。

于 2013-05-03T13:32:22.330 回答
0

您的方法可能工作正常,但最好使用更松散耦合的方法,其中 ListFragment 通知宿主活动已单击项目,然后活动通知“其他”片段进行更新。

无需担心构建和替换新片段。

示例活动

public class TestActivity extends Activity implements TestFragmentBListener {
    private TestFragmentA mOtherFragment;
    private TestFragmentB mListFrag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        mListFrag = (TestFragmentB) getFragmentManager().findFragmentById(R.id.fragment_b_list);
        mOtherFragment = (TestFragmentA) getFragmentManager().findFragmentById(R.id.fragment_a_text);
    }

    @Override
    public void onTestFragmentBItemCLicked(int position) {
        // Implemented from TestFragmentB.TestFragmentBListener
        mOtherFragment.setText("item " + position + " selected.");
    }
}

示例 FragmentA(包含文本.. 这不起作用,仅作为示例)

public class TestFragmentA extends Fragment {
    public void setText(String text) {
    }
}

示例 ListFragment 定义了示例活动要实现的接口

public class TestFragmentB extends ListFragment {
    private TestFragmentBListener mListener = null;

    public interface TestFragmentBListener {
        void onTestFragmentBItemCLicked(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (TestFragmentBListener) activity;
        } catch (ClassCastException ccex) {
            // activity does not implement our listener
        }
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) { 
        super.onListItemClick(l, v, position, id);

        if (mListener != null) {
            mListener.onTestFragmentBItemCLicked(position);
        }
    }
}

为了完整起见,这是我对示例活动的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    tools:context=".TestActivity" >

    <fragment
        android:id="@+id/fragment_a_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <fragment
        android:id="@+id/fragment_b_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/fragment_a_text" />

</RelativeLayout>
于 2013-05-03T17:23:02.333 回答