2016-06-09 135 views
0

我想在一個Tab中有一個按鈕,它是上傳圖片的活動的一部分,當點擊活動中顯示的兩個Tabs之一中的按鈕時(Tab 1 pics,T​​ab 2 Vid),用戶可以從設備中選擇一個圖像。如何在RecyclerView片段中實現onActivityResult

我的問題是實現onClick Listener和onActivityResult,當它放在onClick後面時,並且@Override被強調爲錯誤。

我想我沒有實現onClick正確的方式,不知道如何激活onActivityResult正確的方式,我將不勝感激任何指導;

MainActivty;

public class upload extends AppCompatActivity { 

public String UserID; 
private static final int REQUEST_SIGNUP = 0; 

private DrawerLayout mDrawerLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.upload); 
    Firebase.setAndroidContext(this); 

    // Adding Toolbar to Main screen 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    // Setting ViewPager for each Tabs 
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 
    // Set Tabs inside Toolbar 
    TabLayout tabs = (TabLayout) findViewById(R.id.tabs); 
    tabs.setupWithViewPager(viewPager); 
} 
    private void setupViewPager(ViewPager viewPager) { 
    Adapter adapter = new Adapter(getSupportFragmentManager()); 
    adapter.addFragment(new UploadPictures(), "Pictures"); 
    adapter.addFragment(new UploadVideos(), "Videos"); 
    viewPager.setAdapter(adapter); 
} 

static class Adapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public Adapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

這裏是代碼片段;

public class UploadPictures extends android.support.v4.app.Fragment { 
    @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    final RecyclerView recyclerView = (RecyclerView) inflater.inflate(
      R.layout.recycler_view, container, false); 
    ContentAdapter adapter = new ContentAdapter(recyclerView.getContext()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

    return recyclerView; 

} 

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public ImageView picture; 
    public EditText tagEditText; 
    public Button tagCurLoc, choosePic, uploadContent; 


    public ViewHolder(LayoutInflater inflater, ViewGroup parent) { 
     super(inflater.inflate(R.layout.pictue_upload, parent, false)); 

     picture = (ImageView) itemView.findViewById(R.id.imgToUpload); 
     tagEditText = (EditText) itemView.findViewById(R.id.tagEditText); 
     tagCurLoc = (Button) itemView.findViewById(R.id.tagCurLoc); 
     choosePic = (Button) itemView.findViewById(R.id.choosePic); 
     choosePic.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE); 

      } 

      protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
       if (data == null) { 
        onActivityResult(requestCode, resultCode, data); 
        Toast.makeText(getActivity().getApplicationContext(), "Canceled ", Toast.LENGTH_SHORT).show(); 


       } else { 
        if (requestCode == RESULT_LOAD_IMAGE) { 
          Uri selectedImgPath = data.getData(); 
          picture.setImageURI(selectedImgPath); 
          RealFilePath = Uri.parse(String.valueOf(selectedImgPath)); 
          Toast.makeText(getActivity().getApplicationContext(), " " + RealFilePath, Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     }); 

     uploadContent = (Button) itemView.findViewById(R.id.uploadContent); 
    } 
} 



/** 
* Adapter to display recycler view. 
*/ 
public class ContentAdapter extends RecyclerView.Adapter<ViewHolder> { 
    // Set numbers of List in RecyclerView. 

    private Context mContext; 

    public ContentAdapter(Context context) { 

     this.mContext = context; 
    } 



    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new ViewHolder(LayoutInflater.from(parent.getContext()), parent); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 

    } 

    @Override 
    public int getItemCount() { 
     return LENGTH; 
    } 

} 

不知道,如果的onClick偵聽器的按鈕應該在適配器或查看持有人實施,並從那裏不能使用onActivityResult的問題?

回答

0

Weel,經過一些閱讀和少量嘗試後解決。

的onclick聽者應在ViewHolder類隨後

@Override 
    onActivityResult. 

來實現內onClickListener onActivityResult通過調用;

startActivityForResult(intent, RESULT_LOAD_IMAGE); 

and onActivityResult;

onActivityResult(requestCode, resultCode, data); 

考慮到所有這些都發生在擴展Fragment的活動中。