2017-01-09 46 views
1

我在一個基於用戶輸入的片段「最近」中顯示了一個列表視圖。現在,我想將該列表視圖作爲對象數組傳遞給容器活動(主活動)(我使用接口傳遞數據),然後當用戶單擊MainActivity中的按鈕時,該數組列表將傳遞給另一個活動顯示爲ListView。當我運行應用程序時,它顯示錯誤「應用程序已停止」。在logcat中也沒有顯示錯誤。請幫助。無法在新的活動中傳遞對象數組

1. My relevant code of interface in Fragment: 


     @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 

       View view=inflater.inflate(R.layout.fragment_one, container, false);    mListView=(ListView)view.findViewById(R.id.myListView); 

       placeList.add(new Place("Shoppers Stop (1st Floor)", "Get 10% Off on Clothes & Jewellery", "shop1")); 
            placeList.add(new Place("Dominos (2nd Floor)", "Get 10% Off on Chef Special Pizzas", "shop2")); 
            placeList.add(new Place("More MegaStore (3rd Floor)", "Wednesday Bazaar, Get min 10% Off","shop4")); 
          mPlaces=placeList.toArray(new Place[placeList.size()]);//Convert arraylist to array 
          passData(mPlaces);//Pass Array of objects for interface 


      mPlaceAdapter = new PlaceAdapter(getActivity(), R.layout.row, mPlaces); 

          if (mListView != null) { 
           mListView.setAdapter(mPlaceAdapter);\\Creating listview in fragment 
          } 

     // Inflate the layout for this fragment 
       return view; 
      } 


    //Inetrface definition 
     public interface OnDataPass { 
       public void onDataPass(Place[] data); 
      } 

      OnDataPass dataPasser; 

      @Override 
      public void onAttach(Context context) { 
       super.onAttach(context); 
       dataPasser = (OnDataPass) context; 
      } 

      @Override 
      public void onDetach() { 
       super.onDetach(); 
       dataPasser=null; 
      } 

      public void passData(Place[] data) { 
       dataPasser.onDataPass(data); 
      } 
     } 

     2. Main Activity (Container of fragement): 
     @Override 
     public void onDataPass(Place []data) { 

      Collections.addAll(allOffers,data); 

     } 


      @Override 
      public boolean onOptionsItemSelected(MenuItem item) { 

       switch(item.getItemId()){ 
          case R.id.all: 
         Intent intent = new Intent(MainActivity.this, AllOffersActivity.class); 
         intent.putExtra("AllOffers", (ArrayList<Place>)allOffers); 
         getApplication().startActivity(intent); 
         return true; 
          default: return super.onOptionsItemSelected(item); 

       } 

      } 

    3. AllOffersActivity Class (where again I want to show listviews): 


         @Override 
         protected void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); 
          setContentView(R.layout.activity_alloffers); 
          onePlaces=(ArrayList<Place>)getIntent().getSerializableExtra("AllOffers"); 
          if(onePlaces!=null) { 
           mPlaces = onePlaces.toArray(new Place[onePlaces.size()]);//To store data into an array 

          } 

          allPlaceAdapter = new PlaceAdapter(AllOffersActivity.this, R.layout.row, mPlaces); 
          allListView=(ListView)findViewById(R.id.allListView); 

          if (allListView != null) { 
           allListView.setAdapter(allPlaceAdapter); 
          } 

         } 
        } 

    4. AndroidManifest.xml: 

     <activity android:name=".activity.MainActivity"> 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN"/> 

         <category android:name="android.intent.category.LAUNCHER"/> 
        </intent-filter> 
     </activity> 

       <activity android:name=".activity.AllOffersActivity"/> 
  • 圖像-i)的圖像,以顯示在片段列表視圖,並且當用戶點擊在底部「明星」圖標,新的活動應該顯示列表視圖這是越來越在片段
  • 所示
    +0

    你如何將場地從一個活動傳遞給另一個活動?你可以追加這個行動的源代碼嗎? – user1185087

    回答

    1

    按照以下步驟來傳遞用戶定義的對象的陣列。

    步驟1:public class Place implements Serializable

    步驟2:修改您的活動你在哪裏將數據傳遞到其他類

    Intent data = new Intent(MainActivity.this, AllOffersActivity.class); 
    data.putExtras("AllOffers", (Serializable) allOffers); 
    startActivity(data); 
    

    步驟3以下:在接收

    if(getIntent() != null) { 
    getIntent().getSerializableExtra("AllOffers"); 
    } 
    

    試試這個。

    +0

    putSerializable在代碼中顯示爲紅色,並且說方法未解決。如何糾正它。 –

    +0

    我改變了我的代碼。請看一看。希望這可以幫助。 – ChaitanyaAtkuri

    +0

    這種技術也適用於'Fragment.setArguments',因爲它需要一個'Bundle'。 –

    0

    可以使用捆綁從一個片段傳遞數組對象其他活動

    捆綁捆=新軟件包();

    bundle.putStringArray(mMyList,「my_list_key」);

    fragment.setArguments(bundle);

    check this

    +0

    嗨,感謝您分享鏈接。我懷疑其中的一個代碼.OnFragmetInteractionListener listener =(OnFragmentInteractionListener)activity;這是什麼活動? –

    +0

    'putStringArray'只適用於'ArrayList '而不是'ArrayList '。你必須使用一個'Serializable'類並傳遞它。還要注意,所有的子對象也必須是「Serializable」。 –

    +0

    是的,使用可序列化解決了我的問題。非常感謝 –