【问题标题】:Call one fragment from another从另一个片段中调用一个片段
【发布时间】:2013-08-22 08:22:27
【问题描述】:

我的解释很糟糕,我会尽力做到最好:)

我尝试使用 Tabhost 并在每个选项卡中显示列表片段。

[标签视图中的ListFragments]:

这就是它的样子。

单击列表元素时,会调用另一个片段来显示详细信息,如下所示。 【点击列表元素】: 有2个问题。

  1. DetailsFragment 不是全屏显示。即能够看到列表(您可以在上图中看到)
  2. 当我返回选项卡视图并单击列表时,它会显示: "java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread[in ListView(16908298, class android.widget.ListView) with Adapter(class android.widget.SimpleAdapter)] " TabView xml:

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >
    
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:orientation="horizontal" />
    
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_weight="0" />
    
            <FrameLayout
                android:id="@+android:id/realtabcontent"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1" />
        </LinearLayout>
    </TabHost>
    

detailsFragment xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container1"
    android:layout_width="match_parent"
    android:layout_height="fill_parent" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            android:shrinkColumns="*"
            android:stretchColumns="*" >

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="50dip"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Msg Id"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv1"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="PID"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv2"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Sender BS"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv3"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Sender NS"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv4"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Sender Interface"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv5"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Receiver BS"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv6"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Receiver NS"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv7"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Receiver Interface"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv8"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Msg Type"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv9"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Msg State"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv10"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Exe Time"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv11"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Init Time"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv12"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Send Time"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv13"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Admin User"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv14"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:text="Payload"
                    android:textColor="#000000"
                    android:textSize="13sp" />

                <TextView
                    android:id="@+id/tv15"
                    android:layout_weight="1"
                    android:background="#a09f9f"
                    android:gravity="center"
                    android:paddingBottom="5sp"
                    android:paddingTop="5sp"
                    android:textColor="#000000"
                    android:textSize="13sp" />
            </TableRow>
        </TableLayout>
    </ScrollView>

</FrameLayout>

提前致谢

【问题讨论】:

  • 同时发布您的代码和 logcat。
  • 如果以下内容无法提供代码 sn-p

标签: android list android-fragments tabview


【解决方案1】:
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification.

Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(16908298, class android.widget.ListView) with Adapter(class android.widget.SimpleAdapter)] "

添加项目后,请在UI线程中调用notifyDataSetChanged()yourListView.requestLayout()。问题是您绑定到Adapter的集合在后台线程中发生了变化。因此,解决方案是将其移至 UI 线程(如上所述)或简单地用 runOnUiThread() 包装它。

runOnUiThread(new Runnable() {
  public void run() {
    your_collection.add(item);
    your_adapter.notifyDataSetChanged();
    yourListView.requestLayout();
  }
});

将另一个片段称为当前片段:

SecondFragment secFrag = new SecondFragment();
FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
                    fragTransaction.replace(R.id.frame_fragment,secFrag );
                    fragTransaction.addToBackStack(null);
                    fragTransaction.commit();

编辑:

要全屏显示细节片段,请进行以下更改:

  1. 在您的滚动视图中 将android:layout_height="wrap_content" 替换为android:layout_height="fill_parent"

  2. 在您的表格布局中 将android:layout_height="wrap_content" 替换为android:layout_height="fill_parent"

【讨论】:

  • 感谢您的回复。第一个问题已解决 :) 但第二个问题是新片段仅占屏幕的一半,即它显示在列表片段上方。我希望该片段能够完整显示
  • 很高兴您的第一个问题得到解决。请提供相关的xml文件。
  • 我已经发布了xml文件。
  • 我已经更新了我的答案,请看我的帖子。希望它能解决你的问题。
  • :( 不......它没有解决......我面临的确切问题是......详细信息片段正在加载到同一个列表片段中...... :(不确定我是否解释得当
【解决方案2】:

对于上面你只需要添加一个片段你只需要一个实例:

例如-

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Search fragment = new  Search();
fragmentTransaction.add(R.id.mainLayout,fragment , "MY_FRAG");
fragmentTransaction.commit();

【讨论】:

  • 感谢您的回复。我已经这样做了。我现在面临的问题是:单击 listFragment 时,它不会出现在全屏上,而是仅出现在屏幕的某些部分。如图 2 所示
【解决方案3】:

试试这个例子

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    Search fragment = new  Search();
    fragmentTransaction.add(R.id.mainLayout,fragment , "MY_FRAG");
    fragmentTransaction.commit();

它确实帮助您使用另一个片段中的片段。

【讨论】:

    【解决方案4】:

    使用 hadler 通知您的列表,因为您无法从后台或工作线程访问任何 UIComponents,因此必须从 UI 线程访问。确保使用以下技巧。

    Handler mHandler = new Handler();
    mHandler.post(new Runnable() {
    
    @Override
    public void run() {
        listadapter.notifyDataSetChanged();
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      相关资源
      最近更新 更多