android – 如何使用JSON对象传递JSON数组

GridView包含类别,当我点击任何GridView项目(即 – 任何类别)时,我想仅在ViewPager中显示那些属于该特定类别的项目.

例如,我首先有两个类别 – 电子设备和第二个设备 – 仍然每当我点击设备类别时 – 它显示所有项目(从电子设备1到设备2),而它必须仅显示设备类别下的项目

问题

仍然显示ViewPager中的所有项目,无论用户点击了哪个类别….我怎样才能显示属于tapped类别的那些项目?

public class MainActivity extends Activity {

    ArrayList<Items> itemsArrayList;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        itemsArrayList = new ArrayList<Items>();

        ...

        gridView.setonItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0,View arg1,int position,long id) {

                String categoryName = menusArrayList.get(position).getName().toString();
                Log.d("categoryName:",categoryName);                   

                menus = menusArrayList.get(position);                               
                itemsArrayList = menus.getItemsArrayList();     

                adapter = new ViewPagerAdapter(MenusActivity.this,R.layout.adapter_viewpager,itemsArrayList);

                viewPager.setAdapter(adapter);
            }
        });
    }


    class JSONAsyncTask extends AsyncTask<String,Void,Boolean> {

        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected Boolean doInBackground(String... urls) {
            try {

                .....

                    JSONArray jsonArray = jsonObject.getJSONArray("category");

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jObject = jsonArray.getJSONObject(i);

                        menus = new Menus();

                        menus.setName(jObject.getString("name"));                       
                        menus.setimage(jObject.getString("image"));

                        JSONArray imagesArray = jObject.getJSONArray("items");                      

                        for(int j=0; j<imagesArray.length(); j++)
                        {
                            JSONObject imagesObject = imagesArray.getJSONObject(j);

                            items = new Items();
                            items.setTitle(imagesObject.getString("title"));
                            items.setimage(imagesObject.getString("image"));                                

                            itemsArrayList.add(items);
                        }       

                        menus.setItemsArrayList(itemsArrayList);                        
                        menusArrayList.add(menus);
                    }
                    return true;
                }
                ...
            return false;
        }

        protected void onPostExecute(Boolean result) {
            dialog.cancel();
            ...

        }
    }

}

解决方法

您的itemArrayList是全局的,并且在解析时,每次读取类别时都会将项目添加到该列表中.因此,您的itemListArray包含所有项目.由于在将项目添加到列表时引用了列表,因此您还要将项目添加到以前的类别,因为它们引用了相同的列表.尝试像这样改变你的内循环.

ArrayList<Items> itemsArrayList = new ArrayList<Items>();    
for(int j=0; j<imagesArray.length(); j++)
                        {
                        JSONObject imagesObject = imagesArray.getJSONObject(j);

                    items = new Items();
                    items.setTitle(imagesObject.getString("title"));
                    items.setimage(imagesObject.getString("image"));                                

                    itemsArrayList.add(items);
                }

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...