如何在 2 个片段之间传递 JSON 数据?
How do i pass JSON data between 2 fragments?
我正在检索我的 JSON,如下所示:
myResponse.java :
public List<Repo> getData() {
return data;
}
public void setData(List<Repo> data) {
this.data = data;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MyResponse)) return false;
MyResponse that = (MyResponse) o;
return data != null ? data.equals(that.data) : that.data == null;
}
@Override
public int hashCode() {
int result = statusCode.hashCode();
result = 31 * result + message.hashCode();
result = 31 * result + (data != null ? data.hashCode() : 0);
return result;
}
public static class Repo {
@Expose
@SerializedName("title")
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Repo)) return false;
Repo repo = (Repo) o;
if (!id.equals(repo.id)) return false;
if (!title.equals(repo.title)) return false;
return description.equals(repo.description);
}
@Override
public int hashCode() {
int result = id.hashCode();
result = 31 * result + title.hashCode();
return result;
}
}
现在在我的片段 1 适配器中我有:
itemView.setOnClickListener(v -> {
AppCompatActivity activity = (AppCompatActivity) itemView.getContext();
activity.getSupportFragmentManager()
.beginTransaction()
.disallowAddToBackStack()
.setCustomAnimations(R.anim.slide_left, R.anim.slide_right)
.add(R.id.root_view, Fragment2.newInstance(), Fragment2.TAG)
.commit();
这是我的 fragment2 新实例:
public static Fragment2 newInstance() {
Bundle args = new Bundle();
Fragment2 fragment = new Fragment2();
fragment.setArguments(args);
return fragment;
}
有没有一种方法可以将我从 JSON 检索到的属性标题和描述从片段 1 传递到片段 2?
我想在 fragment2 textview 中显示这些属性,但不确定什么是最好的方法。尝试过在线查找,但没有找到 far.Any 个想法?
创建新 Fragment
时,您希望通过 Bundle
.
传递数据
public static Fragment2 newInstance(Repo repo) {
Fragment2 fragment = new Fragment2();
Bundle args = new Bundle();
args.putString("title", repo.getTitle());
args.putString("description", repo.getDescription());
fragment.setArguments(args);
return fragment;
}
然后在您的 Fragment2
中,您可以再次获取它们。
void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle arguments = getArguments();
String title = arguments.getString("title", "");
String description = arguments.getString("description", "");
}
我正在检索我的 JSON,如下所示: myResponse.java :
public List<Repo> getData() {
return data;
}
public void setData(List<Repo> data) {
this.data = data;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MyResponse)) return false;
MyResponse that = (MyResponse) o;
return data != null ? data.equals(that.data) : that.data == null;
}
@Override
public int hashCode() {
int result = statusCode.hashCode();
result = 31 * result + message.hashCode();
result = 31 * result + (data != null ? data.hashCode() : 0);
return result;
}
public static class Repo {
@Expose
@SerializedName("title")
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Repo)) return false;
Repo repo = (Repo) o;
if (!id.equals(repo.id)) return false;
if (!title.equals(repo.title)) return false;
return description.equals(repo.description);
}
@Override
public int hashCode() {
int result = id.hashCode();
result = 31 * result + title.hashCode();
return result;
}
}
现在在我的片段 1 适配器中我有:
itemView.setOnClickListener(v -> {
AppCompatActivity activity = (AppCompatActivity) itemView.getContext();
activity.getSupportFragmentManager()
.beginTransaction()
.disallowAddToBackStack()
.setCustomAnimations(R.anim.slide_left, R.anim.slide_right)
.add(R.id.root_view, Fragment2.newInstance(), Fragment2.TAG)
.commit();
这是我的 fragment2 新实例:
public static Fragment2 newInstance() {
Bundle args = new Bundle();
Fragment2 fragment = new Fragment2();
fragment.setArguments(args);
return fragment;
}
有没有一种方法可以将我从 JSON 检索到的属性标题和描述从片段 1 传递到片段 2? 我想在 fragment2 textview 中显示这些属性,但不确定什么是最好的方法。尝试过在线查找,但没有找到 far.Any 个想法?
创建新 Fragment
时,您希望通过 Bundle
.
public static Fragment2 newInstance(Repo repo) {
Fragment2 fragment = new Fragment2();
Bundle args = new Bundle();
args.putString("title", repo.getTitle());
args.putString("description", repo.getDescription());
fragment.setArguments(args);
return fragment;
}
然后在您的 Fragment2
中,您可以再次获取它们。
void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle arguments = getArguments();
String title = arguments.getString("title", "");
String description = arguments.getString("description", "");
}