9874


JSONデータをListFragmentに渡す方法を教えていただけませんか？

詳細：  
JSONArrayで習得したJSONデータをLogで各項目ごとに表示されるまでは確認できております。  
このデータをListFragmentでカスタムリスト表示（画像とタイトル、選択したらHPに移動）させたいのですが、具体的な方法にたどり着けておりません。  
アドバイスを頂ければ幸いです。

ちなみに、ListFragmentプログラムは下記を参考にしております。  
<http://qiita.com/mackiso/items/09c2bfc99edd5f66f42f>

動作確認をするため、JSONデータの代わりにListFragmentのonStart()にを記載、ボタンが押されることでリスト項目が追加され、項目を選択するとHPに移動します。  
これらの動作には問題がないことを確認しています。  
JSONで得られる３要素（画像、タイトル、コメント）を下記のadapter.add()に渡すことができれば、動作できると考えております。

以下にListFragmentの構文を追記します。

[code]

    public class ItemListFragment extends ListFragment {
        private static ItemListAdapter adapter;
    　    
        public ItemListFragment() {
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            //set adapter
            adapter = new ItemListAdapter(getActivity());
            setListAdapter(adapter);
        }
    
        @Override
        public void onStart() {
            super.onStart();
    
            this.getView().findViewById(R.id.one).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   　
    　　　　　　    　//ここでボタンを押すと下記の内容がリストに追加されていきます。
    　　　　　　　    adapter.add("icon","google","https://www.google.co.jp/");
    
                }
            });
        }
    
[/code]

以下は、JSONデータの構造です。

[code]

    [
    {"title":"タイトル01","content":"http:XXX0","image":"http:YYY0"}
    ,
    {"title":"タイトル02","content":"http:XXX1","image":"http:YYY1"}
    ,
    {"title":"タイトル03","content":"http:XXX3","image":"http:YYY3"}
    ,
    {"title":"タイトル04","content":"http:XXX4","image":"http:YYY4"}
    ,
    {"title":"タイトル05","content":"http:XXX5","image":"http:YYY5"}
    ,
    {"title":"タイトル06","content":"http:XXX6","image":"http:YYY6"}
    ,
    {"title":"タイトル07","content":"http:XXX7","image":"http:YYY7"}
    ]
    
[/code]

試したことは、  
１ 上記addをJSON解析のfor文に入れ、解析動作とともに追加する。  
２ SharedPreferencesでJSONデータを記憶→ListFragmentで読み出し。  
３ fragment.setArguments(bundle);等を使用したFragmentに値を渡す方法。

その他、色々試しているのですが、うまく行っておりません。  
アドバイスを頂ければ幸いです。


CC BY-SA 3.0
2015-05-05T07:11:17.107
9833
2015-05-07T02:44:47.367
2015-05-06T22:06:56.523
8670
8670
question
android json android-listfragment
JSONデータをListFragmentに渡す方法を教えていただけませんか？


JsonArrayをどこから`ListFragment`に渡すのかわからないのですがActivityから`ListFragment`の載っているActivityへ渡すならば､`Bundle`で自作したオブジェクトを渡す場合はそのオブジェクトに`Parcelable`を実装すればできると思います｡
また､`Application`クラスを実装したクラスを作成し､データを一時的にそのクラスに保存することもできると思います｡  
親Activityからそこに実装されたの`ListFragment`へのデータ渡しであれば､`ListFragment`に作成したメソッドを親Activityからデータ取得終了後に呼び出して､その引数でJsonArrayを渡す方法があります｡
また､前者と同様に`Application`クラスを用いることもできると思います｡

また､`SharedPreference`は永続的に保存したいデータを保持する目的に使うべきなのでこのような用途に使うべきではありません｡

しかし､ActivityからActivityへそのような大きなデータを渡すことはActivity同士の結合が強くなってしまうのであまりオススメできないように思います｡  
できるのであれば､`ListFragment`内でデータを取得するべきだと思います｡


CC BY-SA 3.0
2015-05-06T22:55:41.343
9874
2015-05-06T22:55:41.343
7232
9833
answer


`ItemListAdapter`の`add()`の仕様とJSONデータの仕様があっているかはやや疑問ではありますが、ボタンを押した時にこんな感じの処理をしてみましょう。

[code]

    @Override    
    public void onClick(View v) {
        JSONArray array = loadData(); // なんらかの方法でJSONデータをとってくる
        for (int i = 0 ; i < array.length() ; ++i) {
            JSONObject obj = array.getJSONObject(i);
            String title = obj.optString("title", "");
            String content = obj.optString("content", "");
            String image = obj.optString("image", "");
            adapter.add(image, title, content);
        }
        // これ呼ばないと実際にListViewに反映されない               　
        adapter.notifyDataSetChanged();
    }
    
[/code]


CC BY-SA 3.0
2015-05-07T02:44:47.367
9878
2015-05-07T02:44:47.367
845
9833
answer