如何从适配器访问我的主要活动以及如何获取视图中的元素状态?

时间:2012-12-10 23:54:35

标签: android

我有一个Android活动,它是一个地图和一个ExpandableListView。此ExpandableListView使用运行时内置的集合和适配器填充。 此列表视图包含标签,图像和复选框。它们应该用作过滤器:如果选中该复选框,则与该标签相关的项目应显示在我的地图中。如果未选中该复选框。这些物品应该消失。

这是我的活动和适配器(最重要的部分)的代码

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/list_item_child"
        android:gravity="center_vertical"
        android:background="@android:color/white">

 <CheckBox
        android:id="@+id/filtro_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:checked="true"/>

 <ImageView
        android:id="@+id/filtro_imgView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:id="@+id/list_item_text_child"
              android:textSize="20sp"
              android:padding="10dp"
              android:layout_marginLeft="5dp"/>


</LinearLayout>

代码:

@Override
    //in this method you must set the text to see the children on the list
    public View getChildView(int i, int i1, boolean b, View view, final ViewGroup viewGroup) {
        if (view == null) {
            view = inflater.inflate(R.layout.list_item_child, viewGroup,false);
        }

        TextView textView = (TextView) view.findViewById(R.id.list_item_text_child);
        //"i" is the position of the parent/group in the list and
        //"i1" is the position of the child
        Filtro child = mParent.get(i).getArrayChildren().get(i1);
        textView.setText(child.getTitle());

        ImageView imageView = (ImageView) view.findViewById(R.id.filtro_imgView);
        //"i" is the position of the parent/group in the list

        Drawable drawable = view.getResources().getDrawable(child.getImage());

        imageView.setImageDrawable(drawable);

        CheckBox chkbox = (CheckBox) view.findViewById(R.id.filtro_checkbox);
        chkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
                View view2 = inflater.inflate(R.layout.list_item_child, viewGroup,false);
                // TODO Auto-generated method stub
                if (buttonView.isChecked()) {
                Toast.makeText(view2.getContext(), "Checked",
                Toast.LENGTH_SHORT).show();
                }
                else
                {
                Toast.makeText(view2.getContext(), "UnChecked",
                Toast.LENGTH_SHORT).show();
                }

                }
                });


        //return the entire view
        return view;
    }

我是Android开发的新手,但据我所知,此方法代码将“实例化”每个项目的活动布局。这是有效的,项目正在模拟器中填充。 然后,我添加了onCheckedChanged监听器。它工作,吐司显示。 但现在我想根据复选框的选择使引脚显示/隐藏。

要做到这一点,我想

  • 获取已选中的复选框
  • 从地图中删除所有引脚(要做到这一点,我需要以某种方式达到main_activity)
  • 显示与选中复选框相关的引脚

我不知道如何执行这些步骤,我考虑使用单例或观察者设计模式来到达MainActivity,以便能够调用方法来重新加载引脚。 这会是一种优雅的方法吗? 我如何检查所有复选框的状态(选中/未选中)?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用首选项来存储已选中或未选中项目的值。您还可以在更改首选项时注册侦听器。否则,您可以在活动中阅读要显示地图的首选项。

  1. 阅读首选项,然后更新您的复选框。当用户更改复选框时,请更新首选项
  2. 在地图显示活动中,请相应地阅读首选项和PIN。此外,当用户固定/取消时,您可以更新首选项。
  3. https://developer.android.com/reference/android/preference/Preference.html