0

私は Fragment-ListView に取り組んでおり、出力を画像に表示しています。クリックするたびに、fragment2.til の TextView が変更されます。

Fragmetn1 は listView 用で、fragment2 は DifferentView 用です。

今、クリックでfragment2のレイアウトを変更したい。たとえば、item2 がクリックされると、textView を含むレイアウトが fragment2 に設定されます。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");
        }
    }

これを行う他の方法はありますか、その方法も助けてください。

どんな提案でも大歓迎です。事前に感謝します。

ここに画像の説明を入力

4

3 に答える 3

0

次の方法を試してください

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

次に、次の構文を使用して、フラグメントをこの fragmentTransaction に追加する必要があります。

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

最後に、トランザクションをコミットする必要があります。そうしないと、変更が持続しません。

fragmentTransaction.commit();
于 2013-05-03T13:30:40.857 に答える
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 に答える
0

私の意見では、異なるレイアウトの異なるフラグメントを使用し、FragmentTransaction を使用して既存のものを置き換える必要があります。

于 2013-05-03T13:32:22.330 に答える