[英]Passing checkbox input from one fragment to another fragment in the same activity
[英]Passing arraylist from one activity to fragment of another
我試圖將arraylist從一個活動傳遞到另一個活動的片段。 我搜索了很多解決方案,但是找不到有效的答案。
這是我傳遞arraylist的地方。
Intent intent = new Intent(SizeActivity.this,CartActivity.class);
intent.putExtra("PrintList", photoPrintsList);
startActivity(intent);
用片段接受活動。
public class ExampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
if (savedInstanceState == null) {
Fragment newFragment = new CartActivityFragment();
newFragment.setArguments(getIntent().getExtras());
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.commit();
}
}
這就是片段。 如何將數據從一個活動傳遞到另一個片段。
private ArrayList<PhotoPrints> printsArrayList = new ArrayList<>();
private String TAG = "CartActivityFragment";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_cart, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle b = getArguments();
if(b != null) {
Log.d(TAG,b.size() + "");
printsArrayList = b.getParcelableArrayList("PrintList");
Log.d(TAG,"Got arraylist");
} else {
Log.d(TAG,"Null");
}
}
編輯:
我發現片段的onCreateView在保持活動的onCreate之前被調用。 這樣,我無法將數據從活動中繼到片段。 看一下日志。
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivityFragment﹕ Null checker
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivityFragment﹕ Null
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ Received Arraylist
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 0 /storage/emulated/0/WhatsApp/Media/WhatsApp Images/Sent/IMG-20150913-WA0014.jpg
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 0 4 X 6
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 0 Glossy
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 0 Economy
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 0 6
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 1 /storage/emulated/0/WhatsApp/Media/WhatsApp Images/Sent/IMG-20150913-WA0015.jpg
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 1 4 X 6
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 1 Glossy
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 1 Economy
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 1 6
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 2 /storage/emulated/0/WhatsApp/Media/WhatsApp Images/Sent/IMG-20150915-WA0003.jpg
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 2 4 X 6
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 2 Glossy
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 2 Economy
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ 2 6
09-21 17:21:32.539 22672-22672/in.reduxpress D/CartActivity﹕ Size of bundle 1
如何繞過這種行為?
Edit2:我已經廣泛測試。 我能夠成功接收活動中的數據。 我將其放入包中並將該包設置為參數。 但是我無法收到片段中的捆綁包。 它總是給我一個空值。
我試過把getArguments放在onCreateView以及onActivityCreated中,兩者都不起作用。 請幫忙。
嘗試這個,
這是我傳遞arraylist的代碼:
Intent intent = getIntent();
intent.putExtra("key", selectImages);
setResult(RESULT_OK, intent);
finish();
這是onActivityResult()。
public void onActivityResult(int requestCode, int resultCode, Intent data){
if (requestCode == 999) {
@SuppressWarnings("unchecked")
ArrayList<String> ar1 = data.getStringArrayListExtra("key");
if(ar1.size()!= 0){
for (int i = 0; i < ar1.size(); i++) {
String value = ar1.get(i);
Toast.makeText(getActivity(),
"Path of array in home Fragment: "+ar1,
Toast.LENGTH_LONG).show();
} } } }
這是Myparcelable的類代碼:
import java.util.ArrayList;
import android.os.Parcel;
import android.os.Parcelable;
public class ObjectA implements Parcelable {
public ArrayList<String> choices;
public ObjectA (ArrayList<String> choices) {
this.choices = choices;
}
@SuppressWarnings("unchecked")
public ObjectA (Parcel parcel) {
parcel.readArrayList(null);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringList(choices);
}
// Method to recreate a ObjectA from a Parcel
public static Creator<ObjectA> CREATOR = new Creator<ObjectA>() {
@Override
public ObjectA createFromParcel(Parcel source) {
return new ObjectA(source);
}
@Override
public ObjectA[] newArray(int size) {
return new ObjectA[size];
}
};
}
而已。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.