Android list view inside a scroll view

后端 未结 30 2133
一向
一向 2020-11-21 13:43

I have an android layout which has a scrollView with a number of elements with in it. At the bottom of the scrollView I have a listView

30条回答
  •  我寻月下人不归
    2020-11-21 14:03

    • It is not possible to use Scroll-view inside List-view as List-view already has scrolling property.
    • To use list-view inside Scroll-view you can follow these steps which worked for me :

      1) Create NonScrollListView java file that disable the default scrolling property of list-view. and code is below

      package your-package-structure;
      
      import android.content.Context;
      import android.util.AttributeSet;
      import android.view.ViewGroup;
      import android.widget.ListView;
      
      public class NonScrollListView extends ListView {
      
        public NonScrollListView(Context context) {
            super(context);
        }
        public NonScrollListView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
        @Override
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                  Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
          super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
          ViewGroup.LayoutParams params = getLayoutParams();
          params.height = getMeasuredHeight();
        }
      }
      

      2) Now create xml file which which has NestedScrollView and inside this use NonScrollListView for listing your items. This will make your entire screen to scroll with all the views.

              
                  
                  
                  
                  
              
              
                  
                  
              
      
             
                  
              
      
          
      

      3) Now in java class i.e, home.java define NonScrollListView instead of Listview.

      package comabc.xyz.landscapeapp;
      import android.content.Intent;
      import android.support.annotation.NonNull;
      import android.support.annotation.Nullable;
      import android.support.v4.app.Fragment;
      import android.os.Bundle;
      import android.support.v4.app.FragmentTransaction;
      import android.util.Log;
      import android.view.LayoutInflater;
      import android.view.View;
      import android.view.ViewGroup;
      import android.widget.AdapterView;
      import android.widget.Button;
      import android.widget.ImageView;
      
      import android.widget.ListView;
      import android.widget.Toast;
      import android.widget.Toolbar;
      import android.widget.ViewFlipper;
      

      public class home extends Fragment { int pos = 0; ViewFlipper v_flipper;

      @Nullable
      @Override
      public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
          View view = inflater.inflate(R.layout.activity_home, container, false);
          return view;
      }
      
      @Override
      public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
          NonScrollListView listView = (NonScrollListView) view.findViewById(R.id.listview);
          customAdapter customAdapter = new customAdapter(getActivity());
          listView.setAdapter(customAdapter);
          listView.setFocusable(false);
      
          customAdapter.notifyDataSetChanged();
          listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView parent, View view, int position, long id) {
                  Log.d("listview click", "onItemClick: ");
                 /* FragmentTransaction fr = getFragmentManager().beginTransaction().replace(R.id.fragment_container, new productdisplay());
      
                  fr.putExtra("Position", position);
                  fr.addToBackStack("tag");
                  fr.commit();*/
                  Intent intent = new Intent(getActivity(), productdisplay.class);
                  intent.putExtra("Position", position);
                  startActivity(intent);
              }
          });
      
      
          //image slider
          int images[] = {R.drawable.slide1, R.drawable.slide2, R.drawable.slide3};
          v_flipper = view.findViewById(R.id.v_flipper);
          for (int image : images) {
              flipperImages(image);
      
          }
      }
      
      private void flipperImages(int image) {
          ImageView imageView = new ImageView(getActivity());
          imageView.setBackgroundResource(image);
      
          v_flipper.addView(imageView);
          v_flipper.setFlipInterval(4000);
          v_flipper.setAutoStart(true);
      
          v_flipper.setInAnimation(getActivity(), android.R.anim.slide_in_left);
          v_flipper.setOutAnimation(getActivity(), android.R.anim.slide_out_right);
      }
      }
      

      Note: I used Fragments here.

提交回复
热议问题