onActivityResult 更新 TabLayout 但不更新 ViewPager

问题描述

我有一个带有 tabLayout 的主要活动,以及使用 Viewpager 显示的片段。名称和片段作为对象存储在数组列表中。当一个按钮被点击时,第二个活动会打开,并带有随意图发送的数组列表。第二个活动通过添加删除和重新排序列表中的对象来修改数组列表。当第二个活动关闭时,修改后的数组列表将被发送回主活动并带有意图。问题是选项卡是正确的,但片段不会出现。如果我更新主活动中的列表,而不是启动第二个活动,则一切正常。

主要活动

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.google.android.material.tabs.TabLayout;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ArrayList<SuperClass> list;
    TabLayout tabLayout;
    Button btn;
    ViewPager viewPager;
    Adapter2 adapter2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.button);

        viewPager = findViewById(R.id.viewPager);
        tabLayout = findViewById(R.id.tabLayout);

        list = new ArrayList<>();
        list.add(new Frag1("Abe",1));
        list.add(new Frag2("Bill",2));
        list.add(new Frag1("Carl",3));
        list.add(new Frag2("Dick",4));

        tabSetup2();
        buttonCLick();
    }

    private void tabSetup2() {
        adapter2 = new Adapter2(getSupportFragmentManager(),list);
        viewPager.setAdapter(adapter2);
        tabLayout.setupWithViewPager(viewPager);
    }


    private void buttonCLick() {
        btn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // this works fine
//                list.add(new Frag2("haha",3));
//                list.remove(1);
//                adapter2.updateList(list);
//
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                intent.putParcelableArrayListExtra("Forward",list);
                startActivityForResult(intent,1010);
            }
        });
    }

    public void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if (requestCode == 1010) {
            if (resultCode == RESULT_OK) {
                adapter2.updateList(data.getParcelableArrayListExtra("Back"));
            }
        }
    }
}

第二个活动

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;

public class SecondActivity extends AppCompatActivity {
    ArrayList<SuperClass> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        list = new ArrayList<>();
        Button btn = findViewById(R.id.button2);

        Intent intent = getIntent();
        list = intent.getParcelableArrayListExtra("Forward");

        ///ADD,REMOVE,REORDER LIST.
        list.add(new Frag1("ZZ",33));
        list.add(new Frag2("YY",11));

        btn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putParcelableArrayListExtra("Back",list);
                setResult(RESULT_OK,intent);
                finish();
            }
        });
    }
}

适配器


import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;

import java.util.ArrayList;

public class Adapter2 extends FragmentStatePagerAdapter {
    ArrayList<SuperClass> list;

    public Adapter2(@NonNull FragmentManager fm,ArrayList<SuperClass> list) {
        super(fm);
        this.list = list;
    }

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

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

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return list.get(position).getName();
    }

    @Override
    public int getItemPosition(@NonNull Object object) {
        return Adapter2.POSITION_NONE;
    }

    public void removeFrag(int position) {
        list.remove(position);
        notifyDataSetChanged();
    }

    public void updateList(ArrayList<SuperClass> list) {
        this.list = list;
        notifyDataSetChanged();
    }
}

超类


import android.os.Parcel;
import android.os.Parcelable;

import androidx.fragment.app.Fragment;

public class SuperClass extends Fragment implements Parcelable {
    String name;
    int age;

    public SuperClass(String name,int age) {
        this.name = name;
        this.age = age;
    }

    protected SuperClass(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    public static final Creator<SuperClass> CREATOR = new Creator<SuperClass>() {
        @Override
        public SuperClass createFromParcel(Parcel in) {
            return new SuperClass(in);
        }

        @Override
        public SuperClass[] newArray(int size) {
            return new SuperClass[size];
        }
    };

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writetoParcel(Parcel dest,int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }
}

片段 1

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Frag1 extends SuperClass {

    public Frag1(String name,int age) {
        super(name,age);
    }

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_frag1,container,false);
    }
}

片段 2


import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Frag2 extends SuperClass {

    public Frag2(String name,Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_frag2,false);
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)