0

问题是,当我单击列表中的一个元素时,不会转到详细片段视图。但是当它进入横向模式时它工作正常。请告诉我如何通过保持纵向从列表视图转到详细视图模式。

这是我的列表类

 public class HadithList extends ListFragment 
    {

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onActivityCreated(savedInstanceState);
            Log.d("ERROR", "In hadith list");
            String[] strHadith = new String[] {"Hadith one","Hadith two","Hadith three","Hadith four"};
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity()
                    ,android.R.layout.simple_list_item_1,strHadith);
            setListAdapter(adapter);

        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            // TODO Auto-generated method stub
            String item = (String) getListAdapter().getItem(position);
            HadithDetail hadithDetail = (HadithDetail) getFragmentManager().findFragmentById(R.id.hadith_detail);
            //HadithDetail hadithDetail1 = (HadithDetail) getFragmentManager().findFragmentByTag("Details");
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            Toast.makeText(getActivity(), "Selected "+position, Toast.LENGTH_SHORT).show();
            //if(hadithDetail != null && hadithDetail.isInLayout())
            hadithDetail.setText(getDetails(item));
            ft.replace(R.id.hadith_list, hadithDetail);
            ft.commit();

        }

        private String getDetails(String topic)
        {
            if(topic.toLowerCase().contains("one"))
            {
                return "Here is hadith 1 detail";
            }
            if(topic.toLowerCase().contains("two"))
            {
                return "Here is hadith 2 detail";
            }
            if(topic.toLowerCase().contains("three"))
            {
                return "Here is hadith 3 detail";
            }
            if(topic.toLowerCase().contains("four"))
            {
                return "Here is hadith 4 detail";
            }
            return "Cannot find detail";
        }
    }

这是我的细节课

![public class HadithDetail extends Fragment 
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        Log.d("ERROR", "In hadith detail");
        View view = inflater.inflate(R.layout.hadith_detail,container,false);
        return view;
    }

    public void setText(String txt)
    {
        TextView view = (TextView) getView().findViewById(R.id.txtDetail);
        view.setText(txt);
    }
}][1]

活动主要

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/hadith_list"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        class="com.example.hadith_app.HadithList"
        />

</LinearLayout>

详细布局

    <TextView 
        android:id="@+id/txtDetail"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_marginTop="20dip"
        android:text="Hadith 1 Detail"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="30sp"
        />


</LinearLayout>

Activity_Main.xml(土地*强文本*)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/hadith_list"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        class="com.example.hadith_app.HadithList"
        />

    <fragment 
        android:id="@+id/hadith_detail"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="match_parent"
        class="com.example.hadith_app.HadithDetail"
        />
</LinearLayout>
4

2 回答 2

1

首先:FragmentTransaction.replace()获取 ViewGroup 的 ID,而不是片段的 ID。您需要在布局 XML 中有一个 ViewGroup(例如 FrameLayout),作为片段的容器。

第二:不能删除在 XML 布局中静态声明的片段。您需要在创建活动时以编程方式添加它。你可以这样做:

public class MyActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            // savedInstancState is null on the first time onCreate() runs
            Fragment f = new HadithList();
            getFragmentManager().beginTransaction().add(R.id.fragment_container, f).commit();
        }
    }
}
于 2013-08-03T02:09:01.000 回答
0

我相信你应该先阅读这两个链接!查看如何实现 List 和 Details 的示例

http://www.vogella.com/articles/AndroidFragments/article.html

http://developer.android.com/guide/components/fragments.html

一些注意事项:

1)首先,您应该在活动中提交您的交易。

2)在这里ft.replace(R.id.hadith_list, hadithDetail);,您试图用另一个替换您的静态片段。它不像这样工作。(我认为当你这样做时你应该得到一个错误,但我不确定)。

3) 应在 FrameLayout 中添加动态片段。并且不在与您的列表相同的布局中。

无论如何,只需检查上面的链接,这些链接很好地解释了您应该如何实现列表和详细信息片段,我相信您会发现问题所在。

我无法提供完整的示例,因为它肯定不如您在上述教程中找到的示例那么好。

于 2013-08-03T02:08:42.277 回答