0

我试图显示一个ListFragment,它将显示用户在另一个片段中的评论。出于测试目的,我使用父Fragment中的“onClick”方法调用ListFragment。但是,我似乎无法获得ListFragment显示,因为它没有“显示”方法。我的代码中是否有任何明显的问题可以解决?在片段内显示ListFragment

这是当我点击一个按钮来显示ListFragment时调用的方法。

private void showComments(JSONArray comments) { 
    ListFragment newFragment = CommentsFragment.newInstance(comments); 
} 

这里是ListFragment本身。

public class CommentsFragment extends ListFragment { 

public static CommentsFragment newInstance(JSONArray passedComments) { 
    CommentsFragment f = new CommentsFragment(); 
    ArrayList<String> adapter = convertJSON(passedComments); 
    Bundle args = new Bundle(); 
    args.putStringArrayList("adapter", adapter); 
    f.setArguments(args); 
    return f; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    Bundle args = new Bundle(); 
    ArrayList<String> commentsArray = args.getStringArrayList("adapter"); 
    ArrayAdapter<String> commentsAdapter = new ArrayAdapter<String>( 
      getActivity(), R.layout.comments_list, 
      commentsArray); 
    setListAdapter(commentsAdapter); 
} 

回答

0

您必须提交带有FragmentManager的ListFragment,并在XML中包含将包含它的布局。

首先将一个FrameLayout添加到放置ListFragment的XML中,然后使用getChildFragmentManager()获取一个FragmentManager,您可以放置​​ListFragment。

+0

内的FrameLayout的XML,我应该有一个ListView或TextView的? –

+0

它应该只是一个带有ID的空框架布局,用作容器 –

+0

不幸的是,只是将listfragment放置在当前片段的顶部。 –

0

尝试这样

private void showComments(JSONArray comments) { 
     ListFragment newFragment = CommentsFragment.newInstance(comments); 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(android.R.id.content, newFragment); 
     fragmentTransaction.commit(); 
    } 
+0

R.id.content标签有什么用处?我已经用'R.layout.comments_list'填充了CommentsFragment。 –

+0

@MilesPeele R.id.content是保存视图的根布局..所以请使用R.layout.comments_lis代替R.id.content。 –

+0

对,这就是我的想法。当我这样做时,我得到了“没有发现id”异常。 –