0

現在のクラスの listView からアイテムを削除した後、別のフラグメント クラスから listView を更新しようとしています。たとえば、経費のある消費者を削除すると、その消費者の経費も削除されます。しかし、消費者と経費は、フラグメントであるタブ コントロールを使用する別のページです。消費者を削除すると、前のページに移動してから再度ページに入るまで、経費リストは更新されません。消費者リストから消費者が削除されたときに経費リストを更新するにはどうすればよいですか? ブロードキャストレシーバーを使用するとそれができると聞きましたが、コードに実装するにはどうすればよいですか? 私はアンドロイドが初めてです、私を案内してください.Thanks

消費者/参加者リストのコードは次のとおりです。

public class Participant extends ListFragment implements OnClickListener{

Intent intent;
TextView friendId;
Button addparticipant;
String eventId;
ListView lv;

public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    EventController controller = new EventController(getActivity());

    HashMap<String, String> queryValues = new HashMap<String, String>();
    Intent objIntent = getActivity().getIntent();
    eventId = objIntent.getStringExtra("eventId");
    queryValues.put("eventId", eventId);
    ArrayList<HashMap<String, String>> friendList = controller
            .getAllFriends(queryValues);
    if (friendList.size() != 0) {
        lv = getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                friendId = (TextView) view.findViewById(R.id.friendId);
                String valFriendId = friendId.getText().toString();
                Intent objIndent = new Intent(getActivity(),
                        EventPage.class);
                objIndent.putExtra("friendId", valFriendId);
                startActivity(objIndent);
            }
        });
        lv.setOnItemLongClickListener(new OnItemLongClickListener(){

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0,
                    View arg1, int arg2, long arg3) {
                // TODO Auto-generated method stub
                friendId = (TextView) arg1.findViewById(R.id.friendId);
                registerForContextMenu(getListView());
                return false;
            }

        });
        SimpleAdapter adapter = new SimpleAdapter(getActivity(),
                friendList, R.layout.view_friend_entry, new String[] {
                        "friendId", "friendName", "friendSpending" },
                new int[] { R.id.friendId, R.id.friendName,
                        R.id.friendSpending });
        adapter.notifyDataSetChanged();
        setListAdapter(adapter);
    }
}

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

    View rootView = inflater.inflate(R.layout.participant, container, false);
    addparticipant = (Button) rootView.findViewById(R.id.addpart);
    addparticipant.setOnClickListener(this);
    return rootView;

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent objIntent = new Intent(getActivity(),
            AddParticipant.class);
    objIntent.putExtra("eventId", eventId);
    startActivity(objIntent);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    String[] menuItems = getResources().getStringArray(R.array.menu);
    for (int i = 0; i < menuItems.length; i++) {
        menu.add(Menu.NONE, i, i, menuItems[i]);
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    int menuItemIndex = item.getItemId();
    EventController controller = new EventController(getActivity());
    switch (menuItemIndex) {
    case 0:
        String valFriendId = friendId.getText().toString();
        Intent objIndent = new Intent(getActivity(),
                EditParticipant.class);
        objIndent.putExtra("friendId", valFriendId);
        startActivity(objIndent);
        break;
    case 1:
        String valFriendId2 = friendId.getText().toString();
        controller.deleteFriend(valFriendId2);
        onResume();
    }

    return true;
}

@Override
public void onResume() {
    super.onResume();

    if (getListView() != null) {
        updateData();
    }
}

private void updateData() {
    EventController controller = new EventController(getActivity());
    HashMap<String, String> queryValues = new HashMap<String, String>();
    Intent objIntent = getActivity().getIntent();
    eventId = objIntent.getStringExtra("eventId");
    queryValues.put("eventId", eventId);
    SimpleAdapter adapter = new SimpleAdapter(getActivity(),
            controller.getAllFriends(queryValues),
            R.layout.view_friend_entry, new String[] { "friendId",
                    "friendName", "friendSpending" }, new int[] {
                    R.id.friendId, R.id.friendName, R.id.friendSpending });
    setListAdapter(adapter);
}

}

経費リストのコードは次のとおりです。

public class Expense extends ListFragment implements OnClickListener {

Button addexp;
TextView expenseId;
ListView lv;
String eventId, friendId;

public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    EventController controller = new EventController(getActivity());

    HashMap<String, String> queryValues = new HashMap<String, String>();
    Intent objIntent = getActivity().getIntent();
    eventId = objIntent.getStringExtra("eventId");
    queryValues.put("eventId", eventId);
    ArrayList<HashMap<String, String>> expenseList = controller
            .getAllExpenses(queryValues);
    if (expenseList.size() != 0) {
        lv = getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                expenseId = (TextView) view.findViewById(R.id.expenseId);
                String valExpenseId = expenseId.getText().toString();
                Intent objIndent = new Intent(getActivity(),
                        EditExpense.class);
                objIndent.putExtra("expenseId", valExpenseId);
                startActivity(objIndent);
            }
        });
        SimpleAdapter adapter = new SimpleAdapter(getActivity(),
                expenseList, R.layout.view_expense_entry, new String[] {
                        "expenseId", "expenseName","expenseQuantity" }, new int[] {
                        R.id.expenseId, R.id.expenseName, R.id.expenseQuantity });
        adapter.notifyDataSetChanged();
        setListAdapter(adapter);
    }
}

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

    View rootView = inflater.inflate(R.layout.expense, container, false);
    addexp = (Button) rootView.findViewById(R.id.addexp);
    addexp.setOnClickListener(this);
    return rootView;

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent objIntent = new Intent(getActivity(), AddExpense.class);
    objIntent.putExtra("eventId", eventId);
    startActivity(objIntent);
}

@Override
public void onResume() {
    super.onResume();

    if (getListView() != null) {
        updateData();
    }
}

private void updateData() {
    EventController controller = new EventController(getActivity());
    HashMap<String, String> queryValues = new HashMap<String, String>();
    Intent objIntent = getActivity().getIntent();
    eventId = objIntent.getStringExtra("eventId");
    queryValues.put("eventId", eventId);
    SimpleAdapter adapter = new SimpleAdapter(getActivity(),
            controller.getAllExpenses(queryValues),
            R.layout.view_expense_entry, new String[] { "expenseId",
                    "expenseName", "expenseQuantity" }, new int[] { R.id.expenseId,
                    R.id.expenseName, R.id.expenseQuantity });
    setListAdapter(adapter);
}

}

4

2 に答える 2

2

私と同じシナリオ、使用した場合はFragmentPagerAdapter、FirstFragment でこのように試してください

private void updateSecondFragment(){

    //Way to get TagName which generated by FragmentPagerAdapter
    String tagName = "android:switcher:" + R.id.pager + ":" + 1; // Your pager name & tab no of Second Fragment 

    //Get SecondFragment object from FirstFragment
    SecondFragment f2 = (SecondFragment)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);

    //Then call your wish method from SecondFragment to update appropriate list
    f2.updateList();
}

私はこれを読んでその考えを得ました。それから少し編集してください!

于 2013-11-14T04:49:57.563 に答える