How to have a horizontal listview?

前端 未结 2 411
暖寄归人
暖寄归人 2021-01-29 03:02

I have a requirement in which I want few images to be shown in one row with horizontal scroll option.

I tried putting a gridview inside a horizontal-scrollview, and sett

相关标签:
2条回答
  • 2021-01-29 03:45

    I have finally achieved it without using any library, have a look at this:

    I was receiving json responce as this:

    {"searchInfo":{"status":"1","message":"Success","clist":[{"id":"1de57434-795e-49ac-0ca3-5614dacecbd4","name":"Theater","image_url":"http://52.25.198.71/miisecretory/category_images/movie.png"},{"id":"62fe1c92-2192-2ebb-7e92-5614dacad69b","name":"CNG","image_url":"http://52.25.198.71/miisecretory/category_images/cng.png"},{"id":"8060094c-df4f-5290-7983-5614dad31677","name":"Wine-shop","image_url":"http://52.25.198.71/miisecretory/category_images/beer.png"},{"id":"888a90c4-a6b0-c2e2-6b3c-561788e973f6","name":"Chemist","image_url":"http://52.25.198.71/miisecretory/category_images/chemist.png"},{"id":"a39b4ec1-943f-b800-a671-561789a57871","name":"Food","image_url":"http://52.25.198.71/miisecretory/category_images/food.png"},{"id":"c644cc53-2fce-8cbe-0715-5614da9c765f","name":"College","image_url":"http://52.25.198.71/miisecretory/category_images/college.png"},{"id":"c71e8757-072b-1bf4-5b25-5614d980ef15","name":"Hospital","image_url":"http://52.25.198.71/miisecretory/category_images/hospital.png"},{"id":"db835491-d1d2-5467-a1a1-5614d9963c94","name":"Petrol-Pumps","image_url":"http://52.25.198.71/miisecretory/category_images/petrol.png"},{"id":"f13100ca-4052-c0f4-863a-5614d9631afb","name":"ATM","image_url":"http://52.25.198.71/miisecretory/category_images/atm.png"}]}}
    

    so I wanted to create a horizontal scrollview with working click events as I was also have to draw routes on google map so, first I draw a layout for that as like this :

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:weightSum="5">
    
        <fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="4" />
    
    
        <HorizontalScrollView
            android:id="@+id/horizontalScroll"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
    
            <LinearLayout
                android:id="@+id/ll"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="horizontal">
    
    
            </LinearLayout>
    
    
        </HorizontalScrollView>
    </LinearLayout>
    

    now according to json response which consists of json array I done this:

    for (int v = 0; v < collectionInfo.size(); v++) {
                    /*---------------Creating frame layout----------------------*/
    
                    FrameLayout frameLayout = new FrameLayout(ActivityMap.this);
                    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, getPixelsToDP(90));
                    layoutParams.rightMargin = getPixelsToDP(10);
                    frameLayout.setLayoutParams(layoutParams);
    
                    /*--------------end of frame layout----------------------------*/
    
                    /*---------------Creating image view----------------------*/
                    final ImageView imgView = new ImageView(ActivityMap.this); //create imageview dynamically
                    LinearLayout.LayoutParams lpImage = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                    imgView.setImageBitmap(collectionInfo.get(v).getCatImage());
                    imgView.setLayoutParams(lpImage);
                    // setting ID to retrieve at later time (same as its position)
                    imgView.setId(v);
                    imgView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
    //                        long id = imgView.getId();
                            // getting id which is same as its position
                            Log.i(TAG, "Clicked on " + collectionInfo.get(v.getId()).getCatName());
                            // getting selected category's data list
                            new GetSelectedCategoryData().execute(collectionInfo.get(v.getId()).getCatID());
                        }
                    });
                    /*--------------end of image view----------------------------*/
    
                    /*---------------Creating Text view----------------------*/
                    TextView textView = new TextView(ActivityMap.this);//create textview dynamically
                    textView.setText(collectionInfo.get(v).getCatName());
                    FrameLayout.LayoutParams lpText = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER);
                    // Note: LinearLayout.LayoutParams 's gravity was not working so I putted Framelayout as 3 paramater is gravity itself
                    //lpText.gravity = Gravity.BOTTOM | Gravity.CENTER;
                    textView.setTextColor(Color.parseColor("#43A047"));
                    textView.setLayoutParams(lpText);
                    /*--------------end of Text view----------------------------*/
    
                    //Adding views at appropriate places
                    frameLayout.addView(imgView);
                    frameLayout.addView(textView);
                    linearLayout.addView(frameLayout);
    
                }
    

    the trick that is working here is the id that I have assigned to ImageView "imgView.setId(v)" and after that applying onClickListener to that I am again fetching the id of the view....

    in this way I have successfully achieved the solution...I have developed this code few days back, I think I should share with everyone.... Happy coding...

    0 讨论(0)
  • 2021-01-29 03:49

    I suggest you should use RecycleView to achieve it. I think it is the easy way now.
    Take a look at this post to change RecycleView orientation to horizontal
    And how to make a RecycleView: follow this tutorial
    Hope this help

    0 讨论(0)
提交回复
热议问题