【问题标题】:Bind ArrayList with ListView - Android将 ArrayList 与 ListView 绑定 - Android
【发布时间】:2013-10-27 15:39:54
【问题描述】:

我正在尝试将ListViewArrayList 绑定在按钮单击(btnGetPost) 上。我对 Android 编程非常非常陌生。现在,我可以将 Facebook 群组帖子作为 JSON 响应检索。然后我循环这个 JSON 对象并将所有消息添加到 ArrayList

现在我的问题是,我如何在button click 上显示ListView 中的所有消息。我的意思是如何将此 ArrayList 绑定到 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) {
            }
        });
    }


    }



}

【问题讨论】:

    标签: android listview android-listview arraylist


    【解决方案1】:

    基本上,如果您的数组列表中有数据,

    然后您可以将其放入适配器中,该适配器会将数据加载到列表视图中的视图中

    ListView 和 Adapter Basics 工作原理:

    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

    (这不是我的。我从这个页面复制了示例代码和一些解释)

    【讨论】:

      【解决方案2】:

      您通过其适配器将数据绑定到 ListView。在这种情况下,编写您自己的从 ArrayAdapter 派生的适配器会很有用 作为自定义适配器的成员,您可以保留对数据的引用。

      【讨论】:

      • 请给我一些示例代码。正如我在我是 Android 编程新手的问题中提到的,我无法关注你。
      猜你喜欢
      • 2014-05-20
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多