Android 导航抽屉列表项在滚动时隐藏/不可见

Android 导航抽屉列表项在滚动时隐藏/不可见,android,navigation,drawer,Android,Navigation,Drawer,我一直在使用一个android应用程序,它在导航抽屉中显示一个项目列表。抽屉包含标题和下面的内容。我的问题是,当我第一次启动应用程序时,抽屉列表中的所有内容看起来都很好。但当我开始连续上下滚动时,屏幕顶部和底部的一些列表项被隐藏或不可见。我附上必要的代码相同。请有人帮我解决这个问题 自定义抽屉适配器类: public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> { Context context; Li

我一直在使用一个android应用程序,它在导航抽屉中显示一个项目列表。抽屉包含标题和下面的内容。我的问题是,当我第一次启动应用程序时,抽屉列表中的所有内容看起来都很好。但当我开始连续上下滚动时,屏幕顶部和底部的一些列表项被隐藏或不可见。我附上必要的代码相同。请有人帮我解决这个问题

自定义抽屉适配器类:

    public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> {
Context context;
List<DrawerItem> drawerItemList;
int layoutResID;
Runnable r=null;
Handler handler;
View view;
public CustomDrawerAdapter(Context context, int layoutResourceID,
List<DrawerItem> listItems) {
super(context, layoutResourceID, listItems);
this.context = context;
this.drawerItemList = listItems;
this.layoutResID = layoutResourceID;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final DrawerItemHolder drawerHolder;
view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
drawerHolder = new DrawerItemHolder();
view = inflater.inflate(layoutResID, parent, false);
drawerHolder.ItemName = (TextView) view
.findViewById(R.id.drawer_itemName);
drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);
//drawerHolder.submit=(LinearLayout)view.findViewById(R.id.submit_layout);
// drawerHolder.submit_btn=(Button)view.findViewById(R.id.submit_btn);
/*drawerHolder.submit_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("SUBMIT","SUBMIT CLICKED");
Toast.makeText(getContext(),"SUBMITTED OPTION",Toast.LENGTH_SHORT).show();
}
});*/
drawerHolder.itemlayout=(LinearLayout)view.findViewById(R.id.itemlayout);
drawerHolder.header_icon=(ImageView)view.findViewById(R.id.header_icon);
drawerHolder.title = (TextView) view.findViewById(R.id.header_title);
drawerHolder.headerLayout = (LinearLayout) view
.findViewById(R.id.headerLayout);
view.setTag(drawerHolder);
} else {
drawerHolder = (DrawerItemHolder) view.getTag();
}
final DrawerItem dItem = this.drawerItemList.get(position);
if (dItem.getTitle() != null && drawerHolder.header_icon!=null) {
drawerHolder.headerLayout.setVisibility(LinearLayout.VISIBLE);
drawerHolder.itemlayout.setVisibility(View.GONE);
drawerHolder.title.setText(dItem.getTitle());
//drawerHolder.submit.setVisibility(View.GONE);
} else {
drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(dItem.getImgResID()));
drawerHolder.header_icon.setVisibility(View.GONE);
drawerHolder.headerLayout.setVisibility(LinearLayout.GONE);
drawerHolder.ItemName.setText(dItem.getItemName());
//drawerHolder.submit.setVisibility(View.GONE);
}
/* else if(dItem.getTitle().contains("button"))
{
drawerHolder.headerLayout.setVisibility(LinearLayout.GONE);
drawerHolder.itemlayout.setVisibility(View.GONE);
//drawerHolder.submit.setVisibility(View.VISIBLE);
}*/
return view;
}
private static class DrawerItemHolder {
TextView ItemName, title;
ImageView icon,header_icon;
LinearLayout headerLayout,itemlayout;
LinearLayout submit;
//Button submit_btn;
}
}
我正在调用并绘制导航抽屉列表中的项目,如我的主页类中的以下代码片段所示:

//--------------------NAVIGATION DRAWER ITEMS-----------------------------//
mTitle = mDrawerTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerLayout.setDrawerShadow(android.R.color.background_light,
GravityCompat.START);
dataList = new ArrayList<DrawerItem>();
String[] options = getResources().getStringArray(R.array.options);
dataList.add(new DrawerItem("Select your stylist", R.drawable.ic_stylist_select));
dataList.add(new DrawerItem("All Stylist"));
/*---------------STYLIST ARRAY NAVIGATION DRAWER-------------------------*/
stylistnamearray = new ArrayList<>();
for (int i = 0; i < jObj.length(); i++) {
JSONObject object = null;
try {
object = jObj.getJSONObject(i);
String stylistname = object.getString("StylistName");
stylistnamearray.add(stylistname);
set = new HashSet<>();
set.addAll(stylistnamearray);
} catch (JSONException e) {
e.printStackTrace();
}
}
stylistarray = set.toArray(new String[set.size()]);
for (int i = 0; i < set.size(); i++) {
dataList.add(new DrawerItem(stylistarray[i]));
Log.e("STYLIST ARRAY LIST", stylistarray[i]);
}
dataList.add(new DrawerItem("Select your location", R.drawable.ic_globe));
/*-------------------------LOCATION ARRAY NAVIGATION DRAWER--------------------------*/
location_arraylist = new ArrayList<>();
for (int i = 0; i < jObj.length(); i++) {
JSONObject object = null;
try {
object = jObj.getJSONObject(i);
String stylistname = object.getString("Location");
location_arraylist.add(stylistname);
set = new HashSet<>();
set.addAll(location_arraylist);
} catch (JSONException e) {
e.printStackTrace();
}
}
locationarray = set.toArray(new String[set.size()]);
for (int i = 0; i < set.size(); i++) {
dataList.add(new DrawerItem(locationarray[i]));
Log.e("LOCATION ARRAY LIST", locationarray[i]);
}
dataList.add(new DrawerItem("Select my designer", R.drawable.ic_stylist));
dataList.add(new DrawerItem("Wanna be a stylist ?", R.drawable.ic_stylist));
dataList.add(new DrawerItem("Hi Marya !", R.drawable.ic_call));
mDrawerList.bringToFront();
mDrawerLayout.requestLayout();
mDrawerList.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (scrollState == SCROLL_STATE_IDLE) {
mDrawerList.bringToFront();
mDrawerLayout.requestLayout();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
});
/--------------导航抽屉项目-----------------------------//
mTitle=mDrawerTitle=getTitle();
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.left\u抽屉);
mDrawerLayout.setDrawerShadow(android.R.color.background_light,
重力比较(启动);
dataList=newarraylist();
String[]options=getResources().getStringArray(R.array.options);
添加(新的DroperItem(“选择你的设计师”,R.drawable.ic_Stylest_Select));
添加(新的DroperItem(“所有设计师”);
/*---------------设计师阵列导航抽屉-------------------------*/
StylestNameArray=newArrayList();
对于(int i=0;i
最后是我的xml布局(供参考):

主页xml布局:

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
The drawer is given a fixed width in dp and extends the full height of
the container. A solid background is used for contrast
with the content view. -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/black"
android:dividerHeight="1dp"
android:background="#ddd8ba">
</ListView>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
</android.support.v4.widget.DrawerLayout>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="0"
android:background="#ddd8ba">
<LinearLayout
android:id="@+id/headerLayout"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:gravity="left"
android:background="@drawable/list_item_selector"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:id="@+id/header_icon"
android:padding="2dp"/>
<TextView
android:id="@+id/header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:padding="10dp"
android:textColor="#000"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="15dp"
android:textStyle="bold" />
</LinearLayout>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tablerow"
android:background="#244242"
android:orientation="vertical">
<LinearLayout
android:id="@+id/itemlayout"
android:layout_width="fill_parent"
android:layout_span="1"
android:background="@drawable/reverse_list_item_selector"
android:layout_height="40dp"
android:layout_below="@+id/headerLayout">
<ImageView
android:id="@+id/drawer_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@android:color/transparent"
android:padding="5dp" />
<TextView
android:id="@+id/drawer_itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="10dp"
android:text="KRISH"
android:textColor="@color/ivorycream_background"
android:textSize="14dp" />
</LinearLayout>
</TableRow>
</TableLayout>

自定义抽屉项目xml布局:

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
The drawer is given a fixed width in dp and extends the full height of
the container. A solid background is used for contrast
with the content view. -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/black"
android:dividerHeight="1dp"
android:background="#ddd8ba">
</ListView>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
</android.support.v4.widget.DrawerLayout>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="0"
android:background="#ddd8ba">
<LinearLayout
android:id="@+id/headerLayout"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:gravity="left"
android:background="@drawable/list_item_selector"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:id="@+id/header_icon"
android:padding="2dp"/>
<TextView
android:id="@+id/header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:padding="10dp"
android:textColor="#000"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="15dp"
android:textStyle="bold" />
</LinearLayout>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tablerow"
android:background="#244242"
android:orientation="vertical">
<LinearLayout
android:id="@+id/itemlayout"
android:layout_width="fill_parent"
android:layout_span="1"
android:background="@drawable/reverse_list_item_selector"
android:layout_height="40dp"
android:layout_below="@+id/headerLayout">
<ImageView
android:id="@+id/drawer_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@android:color/transparent"
android:padding="5dp" />
<TextView
android:id="@+id/drawer_itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="10dp"
android:text="KRISH"
android:textColor="@color/ivorycream_background"
android:textSize="14dp" />
</LinearLayout>
</TableRow>
</TableLayout>


提前谢谢大家。如果您需要任何进一步的信息,请让我知道。

再次检查您的
custompaureradapter
类和
ListView
。下面的方法对我有效

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (view == null) {
        LayoutInflater mInflater = (LayoutInflater)
                context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        view = mInflater.inflate(R.layout.your_custom_drawer_item, null);
    }

    // use View, not LinearLayout
    View navigationDrawerItemLayout = view.findViewById(R.id.itemLayout);
    View navigationDrawerHeaderLayout = view.findViewById(R.id.headerLayout);

    // for item layout. It based on your "if (itemCondition != null)"
    if ((dItem.getTitle() != null) && (drawerHolder.your_item != null)) {
            // It means, all of navigationDrawerItemLayout's contains are set to VISIBLE
            navigationDrawerItemLayout.setVisibility(View.VISIBLE);
            // It means, all of navigationDrawerHeaderLayout's contains are set to GONE
            navigationDrawerHeaderLayout.setVisibility(View.GONE);
        }

    // For header layout. It based on your "if (headerCondition != null)"
    if ((dItem.getTitle() != null) && (drawerHolder.your_header != null)) {
            // It means, all of navigationDrawerItemLayout's contains are set to GONE
            navigationDrawerItemLayout.setVisibility(View.GONE);
            // It means, all of navigationDrawerHeaderLayout's contains are set to VISIBLE
            navigationDrawerHeaderLayout.setVisibility(View.VISIBLE);
        }

    return view;
列表视图中

<ListView
    android:id="@+id/left_drawer"
    android:background="@color/your_list_background"
    android:cacheColorHint="#00000000"
    android:scrollbarFadeDuration="0" />


谢谢兄弟。。我会调查一下,让你知道它是否有效。如果有效,我会接受你的回答!感谢你在我的问题中通过一系列代码所做的努力:)你救了我的命,兄弟!成功了!:D非常感谢!:)