4

データベース値のリストであるフラグメントが 1 つあります。ListView を使用して値を画面に表示しています。

データベースにエントリを追加するためのボタンを含む別のフラグメントがあります。だから私の問題は、最初のフラグメントのボタンを押してデータベースにエントリを追加すると、画面に表示されるデータベース値のリストを更新するために 2 番目のフラグメント (またはアプリの 2 番目のページ) が必要になることです。 .

データベース リストのフラグメントは次のとおりです。

public class FragManage extends Fragment {

private PunchesDataSource datasource;

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

    datasource = new PunchesDataSource(getActivity());
    datasource.open();

    List<Punch> values = datasource.getAllPunches();

    // Use the SimpleCursorAdapter to show the elements in a ListView
    ArrayAdapter<Punch> adapter = new ArrayAdapter<Punch>(getActivity(),
        android.R.layout.simple_list_item_1, values);

    View myFragmentView = inflater.inflate(R.layout.fragment_manage, container, false);

    ListView list = (ListView) myFragmentView.findViewById(R.id.list);
    list.setAdapter(adapter);

    return myFragmentView;
    }
}

したがって、ボタンを含む他のフラグメントで adapter.notifyDataSetChanged() を実行したいだけです(次のようなもの):

    // Punch OUT button.
    Button out_button = (Button) myFragmentView.findViewById(R.id.out_button);
    out_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            datasource.createPunch("out-" + getTime());

            FragManage.adapter.notifyDataSetChanged();
        }
      });
4

2 に答える 2

2

フラグメントを更新するメインアクティビティでリスナーを使用できます

ボタン付きのフラグメントにこれらを追加します

private void onDBChanged(){
    OnDBListener.DBChanged(true);
}

public void setOnDBListener(OnDBListener listener){
    this.OnDBListener = listener;
}

public interface OnDBListener{
    public void DBChanged(boolean DB_Bool);
}

次にDBフラグで

public void update(){
    adapter.notifyDataSetChanged();
}

次に、フラグメントを作成する Main アクティビティにリスナーをアタッチします

ButtonsFragment.setOnDBListener(new OnDBListener() {
    @Override
    public void DBChanged(boolean DB_Bool) {

        DatabaseViewFrag.update();
    }
});

ボタンフラグメント呼び出しでデータベースを更新するとき

onDBChanged() 

更新されたことをすべて伝える

于 2013-01-18T08:54:36.100 に答える
1

FragA -> MainActivity -> FragBから静的にできないメソッド (FragB 内) に直接通信するには、このソリューションが機能するはずです。

ここでの仕組み: http://android-er.blogspot.com/2012/06/communication-between-fragments-in.html

MainActivity.java に追加したコード:

String FragManage;

public void setTabFragManage(String t){
    FragManage = t;
}

public String getTabFragManage(){
 return FragManage;
}

FragPunch.java に追加したコード

public void onClick(View v) {

...

String TabOfFragManage = ((MainActivity)getActivity()).getTabFragManage();

FragManage fm = (FragManage)getActivity()
    .getSupportFragmentManager()
    .findFragmentByTag(TabOfFragManage);

fm.update(); //This is what is NOT possible before, but now is.
}

FragManage.java に追加したコード

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ...
    String myTag = getTag();

        ((MainActivity)getActivity()).setTabFragManage(myTag);
    ...
    }
于 2013-01-20T09:59:12.300 に答える