我目前正在使用PropertyChangeListeners,我想知道每当一个对象被添加(或删除)到一个索引属性(如ArrayList)时,是否建议触发属性更改。
public class SimpleBean implements Serializable
{
private ArrayList<Matrix> mats;
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public SimpleBean()
{...}
public void addMat(Matrix m)
{
pcs.firePropertyChange("mats", null, m); // I'm having trouble with the parameters
mats.add(m);
}
}
我正在阅读PropertyChangeListener教程,似乎只要绑定属性的值发生更改,就可以触发属性更改。好吧,我不太确定这是否意味着我应该在任何意味着修改属性时触发属性更改,或者仅当属性(或该属性的元素)是严格的时候才会触发属性更改设置/重新分配给不同的值。
在我的程序中,如果每次从垫子ArrayList中删除元素或添加元素时,几个类都可以更改,这将非常方便,我认为PropertyChangeListener可以帮助我。
如果不推荐使用此方法,并且有其他类可以侦听并响应删除/添加到索引属性的其他方式,请告诉我。
答案 0 :(得分:1)
请参阅以下示例:
public class FragmentStorePages extends Fragment implements ReplaceListener {
String categoryName;
int categoryId;
public static FragmentStorePages newInstance(String categoryName, int categoryId){
FragmentStorePages fsp = new FragmentStorePages();
Bundle args = new Bundle();
args.putString("categoryName", categoryName);
args.putInt("categoryId", categoryId);
fsp.setArguments(args);
return fsp;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_store_pages,container,false);
Bundle args = getArguments();
categoryName = args.getString("categoryName");
categoryId = args.getInt("categoryId");
getFragmentManager().beginTransaction().replace(R.id.fragment_store_pages,FragmentStoreSubCategories.newInstance(categoryName),"SubCategoryFragment").commit();
return view;
}
@Override
public void onReplace(Bundle args) {
}
}
它为public class SimpleBean implements Serializable {
private ArrayList<Matrix> mats;
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void setMats(ArrayList<Matrix> mats) {
if(mats.equals(this.mats))
return;
ArrayList<Matrix> oldMats = this.mats ;
this.mats = mats ;
pcs.firePropertyChange("mats", oldMats, mats);
}
public ArrayList<Matrix> getMats() {
return mats;
}
public void setMat(int index, Matrix mat) {
Matrix existing = index == mats.size() ? null : mats.get(index);
if(existing.equals(mat))
return;
mats.remove(index);
mats.add(index, mat);
pcs.fireIndexedPropertyChange("mats", index, existing, mat);
}
public Matrix getMat(int index) {
return mats.get(index);
}
public void addMat(Matrix m) {
setMat(mats.size(), m);
}
}
实现了propertyChange和indexedPropertyChange。