2017-01-27 2 views
2

Ich habe 5 Registerkarte in Viewpager. Standard 1. Registerkarte ist ausgewählt. 1. Registerkarte öffnen Sie die System-Standard-Kamera. Dann gehe ich von 1. zu 2. und 2. zu 3. und so weiter .. Aber Problem ist, wenn ich zurück von 3., 4. oder 5. bis 2. Registerkarte öffnet es Kamera, aber ich habe keine Kamera in der zweiten Registerkarte. Es ist auf der ersten Registerkarte. Warum das passiert? Ich verstehe nicht, ...Tab Swipe funktioniert nicht richtig

Bitte helfen Sie mir ...

My-Code ist wie unten:

TabsPagerAdapterLoginSuccess.java:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class TabsPagerAdapterLoginSuccess extends FragmentPagerAdapter { 
    public TabsPagerAdapterLoginSuccess(FragmentManager supportFragmentManager) { 
     super(supportFragmentManager); 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       // Top Rated fragment activity 
       return new CameraFragment(); 
      case 1: 
       // Games fragment activity 
       return new FriendRequestFragment(); 

      case 2: 
       // Movies fragment activity 
       return new FriendFragment(); 

      case 3: 
       // Movies fragment activity 
       return new SearchFragment(); 

      case 4: 
       return new ProfileFragment(); 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     return 5; 
    } 
} 

LoginSuccess.java

import android.annotation.TargetApi; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

public class LoginSuccess extends AppCompatActivity { 

    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.bottomtabslider); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1); 
     setSupportActionBar(toolbar); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs1); 
     tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.cameraicon1)); 
     tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.friendrequest)); 
     tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.friend)); 
     tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.search)); 
     tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.profileicon)); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

     final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager1); 
     final TabsPagerAdapterLoginSuccess adapterLoginSuccess = new TabsPagerAdapterLoginSuccess(getSupportFragmentManager()); 
     viewPager.setAdapter(adapterLoginSuccess); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 
    } 
} 

CameraFragment.java

import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.support.v4.app.Fragment; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Base64; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.UUID; 

public class CameraFragment extends Fragment { 

    public String mycropimg,encodedImage; 

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

     View rootView = inflater.inflate(R.layout.camerafragment, container, false); 
     ((AppCompatActivity)getActivity()).getSupportActionBar().show(); 

     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     startActivityForResult(intent, 0); 

     return rootView; 

    } 


    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode == getActivity().RESULT_OK) { 
      Bitmap bp = (Bitmap) data.getExtras().get("data"); 
      String partFilename = "image_" + System.currentTimeMillis()+UUID.randomUUID().toString().substring(0,8) + ".jpg"; 

      storeCameraPhotoInSDCard(bp, partFilename); 

      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 

      bp.compress(Bitmap.CompressFormat.PNG, 50, stream); 
      byte[] byte_arr = stream.toByteArray(); 

      encodedImage = Base64.encodeToString(byte_arr, 0); 
      Intent i=new Intent(getActivity(),CameraPostStatus.class); 
      i.putExtra("encoded_image",encodedImage); 
      i.putExtra("imgfilename",partFilename); 

      startActivity(i); 
     } 
    } 


    private void storeCameraPhotoInSDCard(Bitmap bitmap, String currentDate){ 
     File outputFile = new File(Environment.getExternalStorageDirectory(), "image_" + System.currentTimeMillis()+UUID.randomUUID().toString().substring(0,8) + ".jpg"); 
     try { 
      FileOutputStream fileOutputStream = new FileOutputStream(outputFile); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream); 
      fileOutputStream.flush(); 
      fileOutputStream.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Ja genau .... –

+0

Warum setzen Sie Viewpager Currunt Element in SetOnTabSelectedListener? –

+0

dies tun 'viewPager.setOffscreenseiteLimit (5);' –

Antwort

2

Sie müssen diese in Ihrem Code tun

final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager1); 
viewPager.setOffscreenPageLimit(5); 

was im Moment geschieht standardmäßig ViewPager ist hält die aktuelle Seite, um die vorherige Seite und die nächste Seite im Speicher. In Ihrem Fall jedoch, da es 5 Registerkarten gibt, können Sie alle 5 Registerkarten im Speicher behalten. Sie können dies tun, indem Sie ScreenPageLimit deaktivieren.

+0

es Lösung für den 2. Tab. aber die erste Registerkarte kann die Kamera nicht öffnen, wenn sie wieder auf der ersten Registerkarte ist. –

+0

müssen Sie den offenen Kamera-Code in der 'onResume'-Methode Ihres Fragments machen, was Sie gerade in 'onCreate' machen oder teilen Sie Ihren Kamera-Fragment-Code. –

+0

@HirenGondaliya, Ich habe Ihren Code überprüft, gibt es zwei Optionen, entweder fügen Sie eine Schaltfläche und Feuer Absicht auf Schaltfläche klicken oder zweitens, wenn Sie Ihre Kamera jedes Mal öffnen möchten, wenn Sie diese Registerkarte drücken, müssen Sie eine Schnittstelle implementieren und erhalten eine manuelle "onResume" oder "onPause" -Methode "Callback" wie im Falle von View Pager, alle Fragmente laden auf einmal, und bleiben in 'onResume()' –

Verwandte Themen