2013-06-12 2 views
2

여러 개의 탭이있는 곳에 응용 프로그램이 있습니다. 어느 한쪽과 상호 작용하여 표시 할 단편을 호출합니다. 불행히도 아래 조각으로 전환하면 해당 목록에 채워지는 사실에도 불구하고 내 listView가 나타나지 않습니다. 제공 할 수있는 도움에 대해 대단히 감사합니다.조각의 ListView가 표시되지 않습니다.

조각의 관련 코드는 :

public class Fragment_1 extends SherlockFragment { 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    //If time permits, I will try to make a Custom Adapter implemented with a TreeSet 
    TreeSet<BlacklistWord> theSet = MainActivity.getInstance().datasource.GetAllWords(); 
    ArrayList<String> list = new ArrayList<String>(); 
    for(BlacklistWord i :theSet){ 
     System.out.println(i.getWord()); 
     list.add(i.getWord()); 
    } 
    Collections.sort(list); 

    //Making BlackList 
    listView = new ListView(getActivity()); 
    listView.findViewById(R.id.listview); 
    adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list); 
    listView.setAdapter(adapter); 
    ((BaseAdapter) listView.getAdapter()).notifyDataSetChanged(); 
    container.addView(listView); 
    return inflater.inflate(R.layout.blacklist, container, false); 
    //  return inflater.inflate(R.layout.blacklist, container, false); 
} 
} 

XML은

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<ListView 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

답변

1

변경 (블라인드 코딩)에 코드 :

public class Fragment_1 extends SherlockFragment { 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    /** 
    ** Change the way you get the data. Don't keep references to activities like that. 
    **/ 
    TreeSet<BlacklistWord> theSet = MainActivity.getInstance().datasource.GetAllWords(); 
    ArrayList<String> list = new ArrayList<String>(); 
    for(BlacklistWord i :theSet){ 
     System.out.println(i.getWord()); 
     list.add(i.getWord()); 
    } 
    Collections.sort(list); 
    View v = inflater.inflate(R.layout.blacklist, container, false); 

    listView = view.findViewById(R.id.listview); 
    adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list); 
    listView.setAdapter(adapter); 
    return view; 
} 
} 

당신이 잘못 생성자와의 ListView를 생성하고 있기 때문에 귀하의 목록보기 다음 않는 findViewById를을 (전화하는거야, 표시되지 유용하지 않음), 어댑터 설정, 호출 알림 데이터 세트 변경 및 결국 다른 목록을 반환합니다.

+0

안녕하세요, Gunar, 답장을 보내 주셔서 감사합니다. 솔루션 구현을 시도 할 때 RuntimeException이 "자식의 부모에서 먼저 removeView()"를 호출하지 않아서 throw됩니다. MainActivity에서 removeView를 수행해야합니까? – NumenorForLife

+0

위의 코드는 부모 활동에서 멋진 것을하지 않는다는 가정하에 게시했습니다. 프래그먼트는 뷰 계층 구조의 관점에서 액티비티와 분리되어야하며 그 반대의 경우도 마찬가지입니다 ... 비즈니스 로직을 이해할 수 없으므로 더 이상 설명 할 수 없습니다. – gunar

+0

다음 코드 줄을 사용하여 알아 냈습니다. \t \t ((ViewGroup) listView.getParent()). removeView (listView); 다른 SO 게시물에서 추천했습니다. – NumenorForLife

1

사용이 방법입니다 :

public class LListFragment extends ListFragment { 

    private String[] line; 

    public static final String[] TITLES = { "Henry IV (1)", "Henry V", 
      "Henry VIII", "Richard II", "Richard III", "Merchant of Venice", 
      "Othello", "King Lear" }; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 



     ListView listv = getListView(); 

     setListAdapter(new ArrayAdapter<String>(getActivity(), 
       R.layout.scan_row, R.id.textView1, TITLES)); 
    } 
} 

하거나 다음 XML 내부에서 목록보기를 ... 새 목록보기 만들고, 자식으로 그 안에 당신의 XML 목록보기를 찾기 위해 노력하고 있기 때문에

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.llist_layout, container, false); 
     // do your view initialization here 
     listv = (ListView) view.findViewById(R.id.lineDlist); 
     name = (TextView) view.findViewById(R.id.lineName); 
     st = (TextView) view.findViewById(R.id.lineSt); 


     listv.setAdapter(new ImageAdapter(getActivity(), 
       GeneralClass.lineDetails)); 

     return view; 
    } 
0

...

대신 뭔가를 사용하는 등;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

    View view = inflater.inflate(R.layout.blacklist, container, false); 

    ListView listview = (ListView) view.findViewById(R.id.listview); 

    //Making BlackList 
    adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list); 
    listView.setAdapter(adapter); 
    ((BaseAdapter) listView.getAdapter()).notifyDataSetChanged(); 
    container.addView(listView); 

    return view; 
} 
관련 문제