有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

单击时java ExpandableListView顺序已更改

当我单击groupview时,expandablelist的顺序会改变

我发现有人有类似的问题

顺序似乎是随机的,我不明白发生了什么

这是我的代码,我知道它很混乱,我已经重写了很多次

public class ManageListAdapter extends BaseExpandableListAdapter{

public static final int SERVER_TYPE=0x000001;
public static final int HISTORY_TYPE=0x000002;

private List<ServerElement> mData;

private LayoutInflater mInflater;
private int viewType;


public ManageListAdapter (Context c,int type,ArrayList<ServerElement> data){
    mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mData=(List<ServerElement>) Collections.synchronizedList(new ArrayList<ServerElement>());
    mData=data;
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return mData.get(groupPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return childPosition;
}

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder viewHolder;
    if(convertView==null){
        convertView=mInflater.inflate(R.layout.managelistchildelement, null);

        EditText IP=(EditText) convertView.findViewById(R.id.manageIP);
        IP.setText(mData.get(groupPosition).mIp);

        EditText Port=(EditText) convertView.findViewById(R.id.managePort);
        Port.setText(mData.get(groupPosition).mPort);

        EditText Username=(EditText) convertView.findViewById(R.id.manageUsername);
        Username.setText(mData.get(groupPosition).mUsername);

        EditText Password=(EditText) convertView.findViewById(R.id.managePWD);
        Password.setText(mData.get(groupPosition).mPassword);

        ImageButton btnUpdate=(ImageButton) convertView.findViewById(R.id.okBtn);

        viewHolder=new ViewHolder(IP,groupPosition);
        switch(this.viewType){
        case HISTORY_TYPE:
            IP.setFocusable(false);
            Port.setFocusable(false);
            Username.setFocusable(false);
            Password.setFocusable(false);
            btnUpdate.setVisibility(View.INVISIBLE);
            break;
        case SERVER_TYPE:
            btnUpdate.setFocusable(false);
            break;
        }
        convertView.setTag(viewHolder);
    }else{
        viewHolder=(ViewHolder) convertView.getTag();
    }
    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    // TODO Auto-generated method stub
    return 1;
}

@Override
public Object getGroup(int groupPosition) {
    // TODO Auto-generated method stub
    return mData.get(groupPosition);
}

@Override
public int getGroupCount() {
    // TODO Auto-generated method stub
    return mData.size();
}

@Override
public long getGroupId(int groupPosition) {
    // TODO Auto-generated method stub
    return groupPosition;
}

public void deleteItem(int groupPosition){
    if(mData.size()<=0) return;
    int i=0;
    while (groupPosition+i+1<mData.size()) {
        mData.set(groupPosition+i, mData.get(groupPosition+i+1));
        i++;
    }
    mData.remove(mData.size()-1);
    notifyDataSetChanged();
}

public void addItem(ServerElement element){

    mData.add(element);
    notifyDataSetChanged();
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder viewHolder;
    if(convertView==null){
        convertView=mInflater.inflate(R.layout.managelistgroupelement, null); 
        TextView view=(TextView) convertView.findViewById(R.id.elementCaption);
        ImageView viewDelete=(ImageView) convertView.findViewById(R.id.deleteBtn);
        //viewDelete.setFocusable(false);
        view.setText(mData.get(groupPosition).mName);
        view.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
        view.setPadding(36, 0, 0, 0);
        if(groupPosition==0){
            Log.v("ManageListAdapter", "Still Can be 0");
        }
        viewHolder=new ViewHolder(view,groupPosition);
        viewDelete.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                deleteItem(getViewHolder(v).position);
            }

        });
        convertView.setTag(viewHolder);
    }else{
        viewHolder=(ViewHolder) convertView.getTag();
    }
    return convertView;
}

@Override
public boolean hasStableIds() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return true;
}

@Override
public boolean areAllItemsEnabled()
{
    return true;
}


public static class ViewHolder{
    private TextView txtView;
    public final int position;

    public ViewHolder(TextView view,int position){
        this.txtView=view;
        this.position=position;
    }
}

public ViewHolder getViewHolder(View v)
{
    if(v.getTag() == null)
    {
        return getViewHolder((View)v.getParent());
    }
    return (ViewHolder)v.getTag();
}

private class OnDeleteClickListener implements OnClickListener{           
    private int mGroupPosition;
    OnDeleteClickListener(int groupPosition){
            mGroupPosition = groupPosition;
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.v("ManageListAdapter","Deleting Group "+mGroupPosition);
        deleteItem(mGroupPosition);
    }               
}

private class OnUpdateClickListener implements OnClickListener{           
    private int mGroupPosition;
    private int mChildrenPosition;
    OnUpdateClickListener(int groupPosition,int childrenPosition){
            mGroupPosition = groupPosition;
            mChildrenPosition=childrenPosition;

    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        addItem(mData.get(mGroupPosition));
    }               
}

}

还有我的布局

managelistchildelement。xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout 安卓:id="@+id/tableLayout1" 安卓:layout_width="fill_parent" 安卓:layout_height="fill_parent" xmlns:安卓="http://schemas.安卓.com/apk/res/安卓">
    <TableRow 安卓:id="@+id/tableRow1" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content">
        <TextView 安卓:textAppearance="?安卓:attr/textAppearanceMedium" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content" 安卓:id="@+id/textView1" 安卓:text="@string/Ip:port"></TextView>
        <EditText 安卓:id="@+id/manageIP" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content">
            <requestFocus></requestFocus>
        </EditText>
        <TextView 安卓:textAppearance="?安卓:attr/textAppearanceMedium" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content" 安卓:id="@+id/textView2" 安卓:text="@string/:"></TextView>
        <EditText 安卓:id="@+id/managePort" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content"></EditText>
    </TableRow>
    <TableRow 安卓:id="@+id/tableRow2" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content">
        <TextView 安卓:textAppearance="?安卓:attr/textAppearanceMedium" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content" 安卓:id="@+id/textView3" 安卓:text="@string/username"></TextView>
        <EditText 安卓:id="@+id/manageUsername" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content"></EditText>
    </TableRow>
    <TableRow 安卓:id="@+id/tableRow3" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content">
        <TextView 安卓:textAppearance="?安卓:attr/textAppearanceMedium" 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content" 安卓:id="@+id/textView4" 安卓:text="@string/password"></TextView>
        <EditText 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content" 安卓:inputType="textPassword" 安卓:id="@+id/managePWD"></EditText>
        <ImageButton 安卓:layout_width="wrap_content" 安卓:layout_height="wrap_content" 安卓:src="@drawable/ok" 安卓:id="@+id/okBtn" 安卓:focusable="false" 安卓:focusableInTouchMode="false"></ImageButton>
    </TableRow>
</TableLayout>

managelistgroupelement。xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:layout_height="fill_parent" 安卓:orientation="horizontal"
    安卓:layout_width="wrap_content" 安卓:baselineAligned="false">
    <TextView 安卓:textAppearance="?安卓:attr/textAppearanceMedium"
        安卓:layout_height="wrap_content" 安卓:text="TextView"
        安卓:id="@+id/elementCaption" 安卓:layout_weight="1"
        安卓:layout_width="0dp"></TextView>
    <ImageView 安卓:src="@drawable/delete" 安卓:id="@+id/deleteBtn"
        安卓:layout_gravity="right" 安卓:layout_weight="1"
        安卓:layout_height="wrap_content" 安卓:layout_width="wrap_content"
        安卓:focusable="false" 安卓:focusableInTouchMode="false"></ImageView>

</LinearLayout>

共 (1) 个答案

  1. # 1 楼答案

    我也有同样的问题。当我展开一个项目时,它的下一个项目跳到底部。 这是我的解决办法。在BaseExpandableListAdapter中将此流从false更改为true

    @Override
    public boolean hasStableIds() {
        return true; //Previous value was false
    }
    

    比尔, 阿基拉