0

私はこの cardlibs listview を断片的に持っています。

メイン アクティビティから動的データが入ってきます。

リストビューで最初にフラグメントを呼び出してカードにデータを入力すると、すべてがうまくいきます。それが示している。フラグメントがアクティブ化されているかどうか、および別のカードをリストに追加することになっているフラグメント内のメソッドを呼び出しているかどうかをチェックするように関数を設定しています。

ホスト アクティビティ

    public void pushToFeedFromActivity(JSONObject msg){
    FragmentManager fragmentManager = getFragmentManager();
    if (!myFeedActive) {
        myFeedActive = true;
        Bundle argsScene = new Bundle();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.feedInnerParent, FragFeed.newInstance(msg), "myfeed");
        fragmentTransaction.commit();

    }else {
        FragFeed fragFeed = (FragFeed) getFragmentManager().findFragmentByTag("myfeed");
        fragFeed.pushToFeed(msg);
    }
};

   @OnClick(R.id.PushToFeedButton)
    public void presstoPushToFeed(View v) {
    pushToFeedFromActivity(json)
    ......

onActivity では、バンドルから引数を取得し、json を解析して、それをリストにカードを追加するメソッドに渡します。先ほど言ったように、これらの指示は、フラグメントが最初に追加されたときに機能しますが、その後は機能しません。メソッドはアクティビティから直接呼び出されます。

断片

    public void onActivityCreated(Bundle savedInstanceState) {
    ....
    pushToFeed(jsonFromString);
    .....
    }

    public void pushToFeed(JSONObject json) {
    Log.v(TAG + "pushtofeed", json.toString());
    if (json != null) {
        try {
            body = jsonFromString.get("stdin").toString();
            lo = jsonFromString.get("lo").toString();
            channel = jsonFromString.get("channel").toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    {
    ArrayList<Card> cards = new ArrayList<Card>();
    {
        SceneCard card = new SceneCard(getActivity());
        //CardHeader header = new CardHeader(getActivity());
        card.setClickable(true);
        //card.addCardHeader(header);
        card.setSceneCardloqoo(loqoo);
        card.setSceneCardmsgbody(body);
        card.setSceneCardchannel(channel);
        card.getSceneCardtime();
        cards.add(card);

    }


    CardArrayAdapter mCardArrayAdapter = new CardArrayAdapter(getActivity(), cards);
    CardListView listView = (CardListView) getActivity().findViewById(R.id.fragFeedList);
    if (listView != null) {
        listView.setVerticalScrollBarEnabled(false);
        listView.setAdapter(mCardArrayAdapter);
        Log.v(TAG + "pushtofeed - listview", json.toString());

    }
    mCardArrayAdapter.notifyDataSetChanged();

}

Fragment メソッドに Log ステートメントを追加したので、確実に呼び出しが行われていることがわかります。リストの実装に何かが混じっているだけです。何を与える?

4

1 に答える 1

1

ライブラリの作成者自身から、githubの問題を経由して解決策がもたらされます....

https://github.com/gabrielemariotti/cardslib/issues/313

 @gabrielemariotti commented:

  "In your code, you are using listView.setAdapter(mCardArrayAdapter); each time.
   This code will remove all views from the list view.

   In your case if you want to add new items to an existing adapter,
   you have to retrieve your adapter, add the new items,
   calls the notifyDataSetChanged, without using listView.setAdapter again."
于 2014-10-01T13:58:23.313 に答える