2017-11-10 243 views
0

我正在嘗試創建一個Android應用程序,以便在主活動中顯示一組事件,其中用戶可以將事實添加到正在收藏的其他活動。良好的編程習慣在活動之間共享ArrayList

我遇到了在類之間共享/訪問ArrayList的問題,因此我可以在ArrayList上調用更新方法(添加,刪除等)。我也不確定要解決這個問題需要遵循的最佳做法。

  1. 目前我已經說過我是ArrayList中作爲MainActivity.java公共靜態最終在那裏就可以了更新處理,則此ArrayList是FavouriteActivity.java訪問並分配到一個新的ArrayList集合那裏,可以看出下面的代碼。然而,這是不好的編程實踐,我知道,因此我的問題被張貼在這裏作爲指導。

  2. 我不認爲我可以使用Intent來共享/訪問它,因爲ArrayList存儲的對象不是。我看到過一個類似的問題,但是它對我沒有幫助。

  3. 我試圖在MainActivity中創建一個FavouriteActivity對象,從而在該類的ArrayList中從FavouriteActivity調用諸如addFavourite()的方法,但遇到了幾個錯誤。

  4. 我也嘗試爲FavouriteActivity設計一個構造函數,它在創建時接受ArrayList,從而通過MainActivity傳遞ArrayList。這再次沒有奏效,遇到了幾個問題。

理想情況下,應該在收藏夾列表中執行所有這些處理?在MainActivity中,FavouriteActivity或FavouriteAdapter?

謝謝大家。

Favourite.java

這個類有兩個字段,都是字符串來表示一個ID和一些文本。在構造函數和兩個get方法中初始化以返回它們的值。

FavouriteAdapter.java

imports omitted. 

public class FavouriteAdapter extends ArrayAdapter<Favourite> { 

    public FavouriteAdapter(Context context, ArrayList<Favourite> favourite) { 
     super(context, 0, favourite); 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, @NonNull ViewGroup parent) { 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.favourite_item, parent, false); 
     } 

     Favourite currentFavourite = getItem(position); 

     TextView idTextView = (TextView) convertView.findViewById(R.id.id_text_view); 
     idTextView.setText(currentFavourite.getId()); 

     TextView textTextView = (TextView) convertView.findViewById(R.id.text_text_view); 
     textTextView.setText(currentFavourite.getText()); 

     return convertView; 
    } 
} 

FavouriteActivity.java

此類使用,並顯示已使用的適配器和ListView添加到ArrayList事實的集合。

imports omitted. 

public class FavouriteActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_favourite); 

     ArrayList<Favourite> allFavourites = MainActivity.allFavourites; 

     FavouriteAdapter favouriteAdapter = new FavouriteAdapter(FavouriteActivity.this, allFavourites); 

     ListView listView = (ListView) findViewById(R.id.list_view); 
     listView.setAdapter(favouriteAdapter); 
    } 
} 

MainActivity.java

這對於其中顯示的事實的用戶主視圖GUI。

回答