2015-02-09 149 views
1

我有一個觀點尋呼機和三個選項卡像 「FragmentOne」「FragmentTwo」等片段標籤viewpager問題

在每個片段(頁)的片段我想設置從畫廊或從camera.But圖像當我在FragmentOne選項卡中設置圖像(位圖)時,位圖也顯示在其他片段中。但我想要獨特的選擇圖像應顯示在各自片段的ImageView中。

My ViewPager類看起來像。

public class MainFragment extends Fragment { 
private ViewPager mViewPager; 
private SlidingTabLayout mSlidingTabLayout; 

// Tabs titles 
private String[] tabsTitles = {"One", "Two", "Three"}; 




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

    View rootView = inflater.inflate(R.layout.new_proj_frag_layout, container, false); 
    // ViewPager 
    mViewPager = (ViewPager) rootView.findViewById(R.id.viewpager); 
    mViewPager.setOffscreenPageLimit(3); 
    mViewPager.setAdapter(new ViewPagerAdapter(getChildFragmentManager(), tabsTitles)); 

    // Sliding tab layout 
    mSlidingTabLayout = (SlidingTabLayout) rootView.findViewById(R.id.sliding_tabs); 
    mSlidingTabLayout.setViewPager(mViewPager); 
    return rootView; 
} 

FragmentOne

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.white_fragment_layout, container, false);   
    image_one_btn = (ImageView) rootView.findViewById(R.id.image_one_click);  
    image_one_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectImage(); 
     } 
    }); 

    return rootView; 
} 

private void selectImage() { 
    Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    getParentFragment().startActivityForResult(i, 1); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (data != null) { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = getActivity().getContentResolver().query(selectedImage,filePathColumn, null, null, null); 

     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     Log.i("ImagePath:","===="+picturePath); 

     image_one_btn.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

     cursor.close(); 
    } else { 
     Toast.makeText(getActivity(), "Try Again!!", Toast.LENGTH_SHORT).show(); 
    } 
} 

ViewPagerAdapter

public class ViewPagerAdapter extends FragmentPagerAdapter { 

private String[] tabsTitles; 

public ViewPagerAdapter(FragmentManager fm, String[] tabsTitles) { 
    super(fm); 
    this.tabsTitles = tabsTitles; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return tabsTitles[position]; 
} 

@Override 
public Fragment getItem(int index) { 
    switch(index) { 
    case 0: 
     return new ImageOneFragment(); 
    case 1: 
     return new ImageTwoFragment(); 
    case 2: 
     return new ImageThreeFragment(); 

    } 

    return null; 
} 

@Override 
public int getCount() { 
    return tabsTitles.length; 
} 

}

+0

片段二代碼在哪裏?請你把它放在這裏。 – Pinakin 2015-02-09 11:53:42

+0

FragmentTwo代碼也類似於fragmentOne代碼。 – 2015-02-09 11:57:03

+0

可以請你發佈你的視圖尋呼機適配器實現嗎? – Pinakin 2015-02-09 11:58:11

回答

1

下面是解決方案,可以幫助任何人面臨同樣的問題。

MainFragment添加以下代碼

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    List<Fragment> fragments = getChildFragmentManager().getFragments(); 
    if (fragments != null) { 
     for (Fragment fragment : fragments) { 
      fragment.onActivityResult(requestCode, resultCode, data); 


      Log.i("in activity result",""); 
     } 
    } 
} 

ImageOneFragment檢查onActivityResult方法requestCode

if (requestCode == 1){ 

//設置圖像的ImageView

}

0

將構造函數添加到您的片段中,如下所述。

public static ImageOneFragment newInstance() { 
ImageOneFragment myFragment = new ImageOneFragment(); 

Bundle args = new Bundle(); 

myFragment.setArguments(args); 

return myFragment;} 

然後你在裏面查看pager做下面的編輯。

switch(index) { 
case 0: 
    return ImageOneFragment.newInstance(); 
case 1: 
    return ImageOneFragment.newInstance(); 
case 2: 
    return ImageOneFragment.newInstance(); 

} 

return null; 

這將創建片段&的新實例,每個部分的工作作爲新的對象。

還可以編輯圖像選擇

private void selectImage() { 
Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(i, 1);} 

的這種方法除去getparentFragment()因爲它會給結果你父片段,然後父母將它傳遞給所有子片段onActivityResult。

執行以下編輯得到它的工作

添加這個方法你ImageOneFragment &移動實現onActivityResult的該方法。

public void handleResult(int requestCode,int resultCode,Intent data){} 

比你的主要片段添加這樣的新列表。

private ArrayList<Fragment>pages; 
pages=new ArrayList<Fragment>(); 
pages.add(ImageOneFragment.newInstance()); 
pages.add(ImageOneFragment.newInstance()); 
pages.add(ImageOneFragment.newInstance()); 

將此列表傳遞給您的查看尋呼機,並根據您的查看尋呼機進行更改。 比你從任何一個片段中選擇ImageImage都會給主要片段和主要片段內部的onActivityResult()結果如下管理結果。

pages.get(viewpager.getselectedItem()).handleresult(requestCode,resultCode,data); 

這將使竅門。

+0

添加構造函數到我的片段,但沒有work.same問題.. – 2015-02-09 12:14:47

+0

請參閱編輯答案 – Pinakin 2015-02-09 12:23:21

+0

如果我刪除getparentFragment(),則不會設置imageView。 – 2015-02-09 12:27:56