java - Android ViewPager 问题

标签 java android android-viewpager

我正在开发android Launcher,它包含三个 Activity ,第一个 Activity 是HomeActivity,其中包含四个按钮,这些按钮将执行 Intent 操作,其余 Activity 是空白的,但是,在HomeActivity 当我点击联系人按钮时,它会显示联系人列表,但是当我选择其中一个联系人时,它不会显示任何内容,其余按钮也像联系人按钮一样,不会跳转到 OnActivityResult() 方法那么我该如何解决这个问题呢?

下面是我的代码:-

MainHomeActivity.java

public class MainHomeActivity extends AppCompatActivity {

    DevicePolicyManager devicePolicyManager;
    ComponentName adminComponent;
    Button apps;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        Button lock = (Button) findViewById(R.id.button_lock);
        lock.setOnClickListener(btnListener);
        Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT,15000);

        apps = (Button) findViewById(R.id.main_menu);
    }

    Button.OnClickListener btnListener = new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            adminComponent = new ComponentName(MainHomeActivity.this, AdminReceiver.class);
            devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);

            if (!devicePolicyManager.isAdminActive(adminComponent)) {

                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponent);
                startActivityForResult(intent, 50);
            } else {
                devicePolicyManager.lockNow();
            }

            apps.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(MainHomeActivity.this, AppsListActivity.class);
                    startActivity(i);
                }
            });
        }
    };
}

HomeActivity.java

public class HomeActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_home_activity);

        ViewPager viewPage = (ViewPager) findViewById(R.id.viewpager);
        viewPage.setAdapter(new CustomPageAdapter(this));
    }

    public void contact(View view){
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
        if(intent.resolveActivity(getPackageManager()) != null){
            startActivityForResult(intent,10);
        }
    }


    public void audioIntent(View view){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getParent()+"/ext_card");
        intent.setDataAndType(uri,"audio/*");
        startActivityForResult(intent,20);
    }

    public void videoIntent(View v){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getParent()+"/ext_card");
        intent.setDataAndType(uri,"video/*");
        startActivityForResult(intent,30);
    }

    public void pdfIntent(View view){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getParent()+"/ext.card");
        intent.setDataAndType(uri,"pdf/*");
        startActivityForResult(intent,40);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == RESULT_OK && resultCode == 10){
            Uri contactUri = data.getData();
            Intent contactIntent = new Intent(Intent.ACTION_CALL);
            contactIntent.setData(contactUri);
            startActivity(contactIntent);
        }

        if(resultCode == 20 && requestCode == RESULT_OK){
            Uri audioUri = data.getData();
            Intent audioIntent = new Intent(Intent.ACTION_VIEW);
            audioIntent.setDataAndType(audioUri,"audio/*");
            startActivity(audioIntent);
        }

        if(requestCode == RESULT_OK && resultCode == 30){
            Uri videoUri = data.getData();
            Intent videoIntent = new Intent(Intent.ACTION_VIEW);
            videoIntent.setDataAndType(videoUri,"video/*");
            startActivity(videoIntent);
        }

        if(requestCode ==  RESULT_OK && resultCode == 40){
            Uri pdfUri = data.getData();
            Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
            pdfIntent.setDataAndType(pdfUri,"pdf/*");
            startActivity(pdfIntent);
        }

    }
}

CustomPagerAdapter.java

public class CustomPageAdapter extends PagerAdapter {

    private Context mContext;

    public CustomPageAdapter(Context context){
        mContext = context;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ModelObject modelObject = ModelObject.values()[position];
        LayoutInflater inflater = LayoutInflater.from(mContext);

        ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(),container,false);
        container.addView(layout);
        return layout;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        ModelObject customPagerEnum = ModelObject.values()[position];
        return mContext.getString(customPagerEnum.getTitleResId());
    }
}

这是应用程序的屏幕截图:-

enter image description here

最佳答案

您在 if 条件中做错了。您正在尝试将 requestCodeRESULT_OK 以及 resultCode 与请求代码(10、20、30 和 40)进行比较这是完全错误的。

用途:

if(requestCode == 10 && resultCode == RESULT_OK)

而不是:

if(requestCode == RESULT_OK && resultCode == 10)

更新onActivityResult()如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == 10 && resultCode == RESULT_OK){
        Uri contactUri = data.getData();
        Intent contactIntent = new Intent(Intent.ACTION_CALL);
        contactIntent.setData(contactUri);
        startActivity(contactIntent);
    }

    if(requestCode == 20 && resultCode == RESULT_OK){
        Uri audioUri = data.getData();
        Intent audioIntent = new Intent(Intent.ACTION_VIEW);
        audioIntent.setDataAndType(audioUri,"audio/*");
        startActivity(audioIntent);
    }

    if(requestCode == 30 && resultCode == RESULT_OK){
        Uri videoUri = data.getData();
        Intent videoIntent = new Intent(Intent.ACTION_VIEW);
        videoIntent.setDataAndType(videoUri,"video/*");
        startActivity(videoIntent);
    }

    if(requestCode == 40 && resultCode == RESULT_OK){
        Uri pdfUri = data.getData();
        Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
        pdfIntent.setDataAndType(pdfUri,"pdf/*");
        startActivity(pdfIntent);
    }

}

希望对你有帮助~

关于java - Android ViewPager 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43974995/

相关文章:

java 使用可完成的 Future 发送异常

java - 重新哈希方法抛出 NullPointerException

android - 如何解决这个奇怪的 viewpager 问题?

android - 动画,在另一个图像上滑动图像

java - SwingUtilities.invokeLater ...有一个invokeNow吗?

java - 使用 MouseMotionListener 时出现问题

java - 定时器在扩展 SurfaceView 并实现 Runnable 的类中不起作用

java - 为什么在 Android API 22 上的 Espresso 测试中 IdlingResource 为空?

android 模拟器不识别希伯来语字体

android - 如何为此代码实现双指缩放