2015-02-09 116 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