0

ボタンクリックでバインドしようとしListViewています。私はAndroidプログラミングに非常に慣れていません。現在、Facebook グループの投稿を JSON 応答として取得できます。次に、この JSON オブジェクトをループして、すべてのメッセージを.ArrayList(btnGetPost)ArrayList

ここで私の質問は、すべてのメッセージを に表示するにはどうすればよいかということListViewですbutton clickArrayListこれをにバインドするにはどうすればよいListViewですか?親切に私を正しい方向に向けてください。

package org.example.fbapp;



@SuppressWarnings("deprecation")
public class FBAppActivity extends Activity {

    // Your Facebook APP ID
    private static String APP_ID = "********************";

    // JSON Node names
    private static final String TAG_DATA = "data";
    private static final String TAG_MESSAGE = "message";

    // data JSONArray
    JSONArray data = null;

    // Instance of Facebook Class
    private Facebook facebook = new Facebook(APP_ID);
    private AsyncFacebookRunner mAsyncRunner;
    String FILENAME = "AndroidSSO_data";
    private SharedPreferences mPrefs;

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> messages = new ArrayList<HashMap<String, String>>();

    // Buttons

    Button btnGetPost;

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fbapp);


        btnGetPost = (Button) findViewById(R.id.btn_group_posts);
        mAsyncRunner = new AsyncFacebookRunner(facebook);


        /**
         * Get Posts from Group
         * */
        btnGetPost.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                getGPosts();
            }
        });


    }



    @SuppressWarnings("deprecation")
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        facebook.authorizeCallback(requestCode, resultCode, data);
    }



    /**
     * Get Group Posts by making request to Facebook Graph API
     * */
    @SuppressWarnings("deprecation")
    public void getGPosts() {
        mAsyncRunner.request("203153109726651/feed", new RequestListener() {
            @Override
            public void onComplete(String response, Object state) {
                Log.d("GET POSTS", response);
                String json = response;

                try {

                    // Facebook Profile JSON data
                    JSONObject obj = new JSONObject(json);
                    JSONArray finalObj = obj.getJSONArray("data");

                    for (int i = 0; i < finalObj.length(); i++) {

                        final String message = finalObj.getJSONObject(i)
                                .getString("message");

                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        map.put(TAG_MESSAGE, message);

                        // adding HashList to ArrayList
                        messages.add(map);


                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(),
                                        "Name: " + message, Toast.LENGTH_LONG)
                                        .show();
                            }

                        });
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

        }

            @Override
            public void onIOException(IOException e, Object state) {
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
            }

            @Override
            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
            }
        });
    }


    }



}
4

2 に答える 2

1

基本的に、配列リストにデータがある場合、

次に、リストビューのビューにデータをロードするアダプタに入れることができます

ListView とアダプタの基本仕組み:

  1. ListView は、リストの各項目についてアダプターに「ビューを表示してください」(getView) ように要求します。
  2. 新しいビューが返されて表示されます

したがって、 BaseAdapterをオーバーライドしようとすることができます

BaseAdapter をオーバーライドする例:getViewメソッドに注意を払うことができます。それがアダプターの本質です。

private class MyCustomAdapter extends BaseAdapter {


    private ArrayList mData = new ArrayList();
    private LayoutInflater mInflater;

    public MyCustomAdapter() {
        mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void addItem(final String item) {
        mData.add(item);
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public String getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        System.out.println("getView " + position + " " + convertView);
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.item1, null);
            holder = new ViewHolder();
            holder.textView = (TextView)convertView.findViewById(R.id.text);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder)convertView.getTag();
        }
        holder.textView.setText(mData.get(position));
        return convertView;
    }

}

次に、単に次のことを行うことができますListView view;

view.setAdapter(myAdapter);

このブログのより詳細な説明 http://android.amberfog.com/?p=296

(これは私のものではありません。このページからサンプルコードと説明の一部をコピーしました)

于 2013-10-27T15:51:36.237 に答える
0

Adapter を介してデータを ListView にバインドします。この場合、ArrayAdapterから派生した独自の Adapter を作成すると便利です 。データの参照をカスタム Adapter のメンバーとして保持できます。

于 2013-10-27T15:47:01.567 に答える