大学の授業として最初の Android アプリを書いています。これまでのところ、ほとんどのことが機能していますが、問題が発生しました。
アプリは構造化されているため、3 つのフラグメントを含む ViewPager を設定するアクティビティがあります。各 Fragment は ListFragment の拡張であり、リストはデータベースから取得されたデータで満たされます。アダプターは、チェックボックスを含む各 ListItem のカスタム ビューを表示します。
私がしたいのは、チェックボックスがチケットであるときに、3 つのフラグメントすべてが更新されることです。つまり、フラグメントごとにデータベースが再クエリされ、リスト ビューが更新されます。
ホームアクティビティ。これにより、ViewPager がセットアップされます。フラグメントを追加し、フラグメント アダプターをセットアップします。public class HomeActivity extends SherlockFragmentActivity {
private FragmentAdapter mPagerAdapter;
private ViewPager mViewPager;
/**
* Set up the view. Add the Fragments to the viewPager, set up tabs.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
getSupportActionBar();
...
//Set up Fragments.
List<MemoFragment> fragments = new Vector<MemoFragment>();
fragments.add(new IncompleteMemoFragment());
fragments.add(new CompleteMemoFragment());
fragments.add(new UrgentMemoFragment());
mPagerAdapter = new FragmentAdapter(getSupportFragmentManager(), fragments);
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setOnPageChangeListener(new TabListener(mTabHost,mViewPager));
mViewPager.setOffscreenPageLimit(3);
}
...
}
フラグメント アダプター
public class FragmentAdapter extends FragmentPagerAdapter {
private List<MemoFragment> mFragments;
public FragmentAdapter(FragmentManager fm, List<MemoFragment> fragments) {
super(fm);
this.mFragments = fragments;
}
@Override
public MemoFragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return this.mFragments.size();
}
}
MemoFragment クラス、IncompleteMemoFragment、CompleteMemoFragment、UrgentMemoFragment はすべてこれを拡張し、99% 同じで、データベースから異なるデータ セットを取得するだけです。
public class MemoFragment extends SherlockListFragment {
protected DatabaseSource datasource;
/**
* Creates the View.
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_memo_list, container, false);
datasource = new DatabaseSource(container.getContext());
datasource.open();
List<Memo> values = getMemos();
datasource.close();
MemoListViewAdaptor adapter = new MemoListViewAdaptor(container.getContext(), values);
setListAdapter(adapter);
return rootView;
}
/**
* Gets the memos to show.
* @return the memos to show.
*/
public List<Memo> getMemos(){
return datasource.getAllMemos();
}
}
これが MemoListViewAdapter です。ここでは、チェックボックスも変更を探していることがわかります。
public class MemoListViewAdaptor extends ArrayAdapter<Memo> {
private final Context mContext;
private final List<Memo> mMemos;
/**
* Save the context and the Memos
* @param context the context to save
* @param memos the memos to save.
*/
public MemoListViewAdaptor(Context context, List<Memo> memos) {
super(context, R.layout.memo_list_row, memos);
this.mContext = context;
this.mMemos = memos;
}
/**
* Get the view. Sets up the list to use the custom view.
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.memo_list_row, parent, false);
...
CheckBox done = (CheckBox) rowView.findViewById(R.id.done);
Memo memo = mMemos.get(position);
done.setOnClickListener(new ClickListener(memo));
if(memo.getCompleteness() == Memo.COMPLETE){
done.setChecked(true);
}
...
return rowView;
}
}
最後にクリックリスナーです。
public class ClickListener implements OnClickListener {
private Memo memo;
ClickListener(Memo memo){
this.memo = memo;
}
@Override
public void onClick(View v) {
if(v.getClass() == CheckBox.class){
Log.v("com.milner.memolist", "These people are crazy. This task is done");
if(((CheckBox)v).isChecked()){
memo.setCompleteness(1);
}else{
memo.setCompleteness(0);
}
DatabaseSource datasource = new DatabaseSource(v.getContext());
datasource.open();
datasource.updateMemo(memo);
datasource.close();
}else{
...
}
}
}
それで、あなたはそれを持っています。それは私がこれまでに持っているものです!ご覧のとおり、私はおそらくこれを非常に複雑な方法で行ってきました... Androidの経験はあまりありません。私が本当にやりたいことは、チェックボックスがオンになっているときにすべてのフラグメントをリロードすることだと思います。
これを行う簡単な方法はありますか?これを行う複雑な方法はありますか?私はこの最後のビットを理解することができません!
あなたが助けてくれることを願っています! :)
ありがとう
トム・M