2013-02-02 1 views
4

내 WebView에서 사용자 사용자가있는 페이지를 가져 와서 FaceBook/등의 URL을 ACTION_SEND 의도로 공유 할 수 있습니다.WebView에서 ShareActionProvider로 URL을 전달 하시겠습니까?

하지만이 URL은 onCreateOptionsMenu에 존재하지 않습니다. 어떻게 그것을 onOptionsItemsSelected로 옮길 수 있습니까? onCreateOptionsMenu 한 번만 호출되기 때문에 귀하의 위의 코드는 작동하지 않습니다

private ShareActionProvider mShareActionProvider; 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 


    return super.onOptionsItemSelected(item); 
} 
    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    MenuItem item = menu.findItem(R.id.menu_item_share); 
    mShareActionProvider = (ShareActionProvider)item.getActionProvider(); 
    mShareActionProvider.setShareHistoryFileName(
     ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); 
    mShareActionProvider.setShareIntent(createShareIntent()); 
    return true; 
} 
private Intent createShareIntent() { 
     Intent shareIntent = new Intent(Intent.ACTION_SEND); 
      shareIntent.setType("text/plain"); 
      shareIntent.putExtra(Intent.EXTRA_TEXT, 
      web.getUrl()); 
      return shareIntent; 
     } 
+0

"url"이 (페이지가로드 된 후) 값을 갖도록 onOptionsItemSelected에 전달한다는 의미입니다. – wilxjcherokee

답변

7

, 옵션 메뉴가 표시됩니다 처음.

매우 쉽게 고정 할 수 있습니다. onOptionsItemSelected이 호출되면 우리는 의도를 구축합니다. 팽창 된 메뉴의 자원이 선택되는 경우입니다. 선택된 항목이 공유 자원 인 경우, shareURL이 실행되어 인 텐트를 빌드하고 시작합니다.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public final boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menu_item_share: 
      shareURL(); 
    } 
    return super.onOptionsItemSelected(item); 
} 

private void shareURL() { 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.setType("text/plain"); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, web.getUrl()); 
    startActivity(Intent.createChooser(shareIntent, "Share This!")); 
} 

위 코드 샘플을 테스트하지 않았습니다. 실제 장치 나 Java 컴파일러를 사용하지 마십시오. 그럼에도 불구하고 그것은 당신의 문제를 해결하는 데 도움이 될 것입니다.

+0

답변 해 주셔서 감사합니다! 나는 당신의 말을 이해합니다. 단지 언더 케이스의 의도가 무엇인지 궁금하십니까? 나는 이것을 다른 곳에서 만들어야 할 필요가있다. 편집 : 고마워요 많이 고마워! – wilxjcherokee

+0

죄송합니다. 내 잘못입니다. 인 텐트 -> shareIntent – ottel142