当前位置: 首页 > 知识库问答 >
问题:

Arraylist在android中重复元素

何雅惠
2023-03-14

实际上,我已经实现了listview,在这里我们可以通过点击与之相关的togglebutton来选择合适的行。我正在将该行中的数据添加到arraylist。但是,我面临的问题是,当我选择行1,然后选择行2时,arraylist中的数据如下:(行1数据,行1数据,行2数据),这里行1数据是重复的。。但是,我需要这个:(第1行数据,第2行数据)。甚至我也尝试使用clear()方法。但是,当我使用它时,它会显示空白数据或上次选择的数据。。

那么,我该怎么办?

请帮帮我。

public class ExpListActivity extends ExpandableListActivity {

static String arrGroupelements[]=new String[60];

List<String> arraylistGroupelements=new ArrayList<String>();
List<String> arraylistChildren;
List<List<String>> arraylistChildelements=new ArrayList<List<String>>();

static String arrChildelements[][];
static final int arrCheckChildToggleButtons[][]=new int[60][60];    

ArrayList<Integer> countChildren=new ArrayList<Integer>();
boolean allChildrenSelected=false,noChildrenSelected=false;  

ExpandableListView expList;
ExpAdapter adapter;
TextView txtDetails;  
ArrayList<String> details,newData;
Button btnShow;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    expList = getExpandableListView(); 
    adapter = new ExpAdapter(this);
    expList.setAdapter(adapter);
    newData=new ArrayList<String>();

    try {

        JSONArray categories=json.getJSONArray("Category_Display");

        for (int i = 0; i < categories.length(); i++) {

            JSONObject c=categories.getJSONObject(i);
            String strCatName=c.getString("category_name");
            arraylistGroupelements.add(strCatName);
            JSONArray subcategories=c.getJSONArray("subcategory");
            arraylistChildren=new ArrayList<String>();
            for (int j = 0; j < subcategories.length(); j++) {
                JSONObject sb=subcategories.getJSONObject(j);
                String strSbName=sb.getString("subcategory_name");
                arraylistChildren.add(strSbName);   

            }
            arraylistChildelements.add(arraylistChildren);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }       

    arrGroupelements=arraylistGroupelements.toArray(new String[arraylistGroupelements.size()]);

    final int listSize=arraylistChildelements.size();
    arrChildelements=new String[listSize][];
    for (int i = 0; i < listSize; i++) {
        List<String> sublist=arraylistChildelements.get(i);
        final int sublistSize=sublist.size();
        countChildren.add(new Integer(sublistSize));
        arrChildelements[i]=new String[sublistSize];
        for (int j = 0; j < sublistSize; j++) {
            arrChildelements[i][j]=sublist.get(j);
        }
    } 

    for (int k = 0; k < adapter.getGroupCount(); k++) {
        for (int m = 0; m < adapter.getChildrenCount(k);m++){
            arrCheckChildToggleButtons[k][m]=0;
        }

    expList.setOnGroupClickListener(new OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View v,
                int groupPosition, long id) {
            return false;
        }
    });

    expList.setOnGroupExpandListener(new OnGroupExpandListener() {
        @Override
        public void onGroupExpand(int groupPosition) {
        }
    });

    expList.setOnGroupCollapseListener(new OnGroupCollapseListener() {
        @Override
        public void onGroupCollapse(int groupPosition) {
        }
    });

    expList.setOnChildClickListener(new OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            return false;
        }
    });
}

public class ExpAdapter extends BaseExpandableListAdapter {

    private Context myContext;

    public ExpAdapter(Context context) {
        myContext = context;
        details=new ArrayList<String>();
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return arrChildelements[groupPosition][childPosition];
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) myContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.child_row, null);

        TextView tvPlayerName = (TextView) convertView
                .findViewById(R.id.tvPlayerName);
        tvPlayerName
                .setText(arrChildelements[groupPosition][childPosition]);

        ToggleButton btnCToggle=(ToggleButton) convertView.findViewById(R.id.btnChildToggle);

        final int gP=groupPosition;
        final int cP=childPosition;

        btnCToggle.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (isChecked) {
                    arrCheckChildToggleButtons[gP][cP]=1;
                } else {
                    arrCheckChildToggleButtons[gP][cP]=0;
                }

            }
        });

        if (arrCheckChildToggleButtons[groupPosition][childPosition]==1) {
            btnCToggle.setChecked(true);
            details=new ArrayList<String>();
            details.add((String) adapter.getChild(gP, cP));
            for (int index = 0; index < details.size(); index++) {
                Toast.makeText(myContext, index+" "+details.get(index), 8000).show();
            }
        }
        else {
            btnCToggle.setChecked(false);

        }
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return countChildren.get(groupPosition);
    }

    @Override
    public Object getGroup(int groupPosition) {
        return arrGroupelements[groupPosition];
    }

    @Override
    public int getGroupCount() {
        return arrGroupelements.length;
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {   
                    LayoutInflater inflater = (LayoutInflater) myContext                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater.inflate(R.layout.group_row, null);

        final int gPos=groupPosition;

        TextView tvGroupName = (TextView) convertView
                .findViewById(R.id.tvGroupName);
        tvGroupName.setText(arrGroupelements[gPos]);
        ToggleButton btnGtoggle= (ToggleButton) convertView.findViewById(R.id.btnGroupToggle);

        ImageView imgHollowCircle=(ImageView) convertView.findViewById(R.id.imgHollowCircle);

        btnGtoggle.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (isChecked) {
                    for(int i=0;i<adapter.getChildrenCount(gPos);i++){
                            arrCheckChildToggleButtons[gPos][i]=1;
                            Log.d("getgroupview_checked", "if part from getgrpview");
                            Log.d("getgroupview_checked", "arrCheckChildToggleButtons["+gPos+"]"+"["+i+"]="+arrCheckChildToggleButtons[gPos][i]);
                    }
                }
                else {
                    for (int i = 0; i < adapter.getChildrenCount(gPos); i++) {
                        arrCheckChildToggleButtons[gPos][i]=0;
            }
                }

                expList.invalidateViews();
            }  
        });

        int i=0;
        for (i = 0; i < adapter.getChildrenCount(gPos); i++) {
            if (arrCheckChildToggleButtons[gPos][i]==0) {
                allChildrenSelected=false;
                break;
            }
        }

        if (i==adapter.getChildrenCount(gPos)) {
            allChildrenSelected=true;
        } 

        imgHollowCircle.setPadding(0, 0, 8, 0);

        if (allChildrenSelected) {
            btnGtoggle.setChecked(true);
            imgHollowCircle.setVisibility(View.VISIBLE);
            imgHollowCircle.setBackgroundDrawable(getResources().getDrawable(R.drawable.green_concrete_circle));

        } else {
            btnGtoggle.setChecked(false);
                imgHollowCircle.setBackgroundResource(R.drawable.green_hollow_circle);
                imgHollowCircle.setVisibility(View.VISIBLE);

        }


        return convertView;
    }

共有1个答案

尉迟浩思
2023-03-14

既然你的问题不清楚,下面是可能的解决办法

我假设,您需要删除第1行中的所有条目。

 类似资料:
  • 我有一个记录。 我的

  • 问题内容: 我需要分离并计算arraylist中有多少个相同的值,并根据出现的次数进行打印。 我有一个名为digits的arraylist: 我创建了一个将每个值分开并将其保存到新数组的方法。 之后,我得到了一个名为数字的新数组。我在此数组上使用排序 和我的ArrayList看起来像这样: 它具有: 我需要根据数字的多少来打印出数字字符串,所以它看起来应该像这样:1354678290 问题答案:

  • 问题内容: 如何从ArrayList中删除重复的元素? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加Set回中ArrayList: 当然,这会破坏中的元素顺序。

  • 我尝试搜索列表中的某个特定名称(如果它在列表中),然后打印该对象。

  • 我想知道如何实现以下操作:我有两个arraylists,其中的值相互关联。也就是说,同一索引上的arraylists的元素彼此相关。例如:ArrayList1(String ArrayList)=[id1,id2,id3,id2,id2,id1]。ArrayList2(整数ArrayList)=[2,3,2,5,6,3]。 我想创建2个新的arraylists与重复的值不再存在。在上面的例子中,新

  • 我想从数组列表打印元素,但我得到错误的输出(.A@15db9742)