2011-09-20 7 views
1

항목 목록이있는 프래그먼트를 호스팅하는 활동을 시작합니다 ..조각을 시작하지 않는 문제를 해결하는 방법은 무엇입니까?

항목을 클릭하면. 레이아웃은 threePane에 대해 테스트됩니다.

public void onFeedSelected(Feed feed) { 
    if (isThreePane) { 
     addItemsFragment(feed); 
    } 
    else { 
     Intent i=new Intent(this, ItemsActivity.class); 

     i.putExtra(ItemsActivity.EXTRA_FEED_KEY, feed.getKey()); 

     startActivity(i); 
    } 
} 

3 개의 창이 아니라면 볼 수 있듯이 활동이 시작됩니다. 일반 전화에서는 정상적으로 작동합니다.

그러나 태블릿 화면 인 경우 활동이 조각에서 실행되지 않습니다.

다음은 내 AddFeed() 메소드입니다.

public void addItemsFragment(Feed feed) { 
    FragmentManager fragMgr=getSupportFragmentManager(); 
    ItemsFragment items=(ItemsFragment)fragMgr.findFragmentById(R.id.second_pane); 
    FragmentTransaction xaction=fragMgr.beginTransaction(); 

    if (items==null) { 
     items=new ItemsFragment(true); 
     items.setOnItemListener(this); 

     xaction 
      .add(R.id.second_pane, items) 
      .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
      .addToBackStack(null) 
      .commit(); 
    } 
    else { 
     ContentFragment content= 
      (ContentFragment)fragMgr.findFragmentById(R.id.third_pane); 

     if (content!=null) { 
      xaction.remove(content).commit(); 
      fragMgr.popBackStack(); 
     } 
    } 

왜 출시되지 않았는지 이해하지 않습니다. 항목을 클릭하면 태블릿 장치에서 아무 작업도 수행하지 않습니다.

편집 :

private boolean isThreePane=false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    FeedsFragment feeds 
     =(FeedsFragment)getSupportFragmentManager() 
                .findFragmentById(R.id.feeds); 

    feeds.setOnFeedListener(this); 

    isThreePane=(null!=findViewById(R.id.second_pane)); 

    if (isThreePane) { 
     feeds.enablePersistentSelection(); 
    } 
} 
+0

isThreePane 변수 란 무엇입니까? 그리고 그것은 진실 또는 거짓으로 설정된 것입니까? 이 변수가 변경된 코드를 모두 게시 할 수 있습니까? 내 추측에 따르면 isThreePane은 타블렛상에서 어떤 이유로 든 true로 설정됩니다. if 및 else에 로그 메시지를 넣고 실제로 어떤 메시지가 있는지 확인할 수 있습니다. – FoamyGuy

+0

내 편집을 확인하십시오. 방금 코드를 게시했습니다 –

+0

어떤 타블렛을 사용하고 있습니까? 벌집인가 아닌가? – FoamyGuy

답변

0

나는 조각의 API에 익숙하지 않은 나는 전혀 그래서 이것은,

isThreePane=(null!=findViewById(R.id.second_pane)); 

가 태블릿에 true로 설정지고 ... 어둠 속에서 총 샷 따라서 findViewById(R.id.second_pane)은 null을 반환하지 않습니다. 이 second_pane보기가 XML에 하드 코딩되어 있습니까? second_pane 뷰가 있어야하는지 여부는 앱에서 어떻게 결정합니까? 그것은 화면 크기를 전혀 기반으로합니까?

이 같은 것을 사용해야합니다

fragMgr.findFragmentById(R.id.second_pane); 

대신 findViewById를의를? 다시 파편 API에 관해서는 아무것도 모릅니다. 어리석은 질문이라면 유감스럽게 생각합니다.

+1

Android는 앱을로드하는 장치에 따라 다른 XML 레이아웃을로드 할 수 있습니다. 보기가 있는지 확인하여 어떤 레이아웃이로드되었는지 확인할 수 있습니다 (예 : two_pane보기가 존재 함 = 대형 디스플레이 장치) – Spidy

+0

대형 장치에는 two_pane이 있지만 중/소형 장치에는 존재하지 않아야합니까? 레이아웃이 레이아웃 내부에있는 layout.xml 인 경우 큰 화면 장치를 사용하는 경우 분명히 존재하게됩니다. – FoamyGuy

+0

귀하의 올바른 스파이. threePane이 true인지 아닌지를 어떻게 알 수 있습니까? –

관련 문제