问题描述
我有一个带有 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 (将#修改为@)