Android:getChild()在ExpandableListView中单击按钮时的EditText值

时间:2013-06-13 14:06:03

标签: android android-layout android-listview expandablelistview

我正在Android中开发Expandablelistview。

在GroupView中只有一个标题,每个组都有不同的ChildView。

此代码工作正常,我可以在每个Group项中看到不同的ChildView。

在ChildView中我有一个EditText,当我点击完成按钮时,我想获得用户输入的所有EditText和Spinner值。

当我点击当时完成按钮时,我想获取用户在小组项Customer Location等中填写的详细信息。

例如:显示的图像。我想获取用户在vehicleTEST组项中填写的输入详细信息。

请,我需要帮助,我想获得用户在每个组项子项的EditText中填充的值。

这是我的代码:

MainActivity.java

public class MainActivity extends Activity {

    Context mContext;
    private ExpandableListView mExpandableListView;
    CustomAdapter mCustomAdapter;

    ArrayList<String> newCalibration = new ArrayList<String>();

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

        mContext = MainActivity.this;

        newCalibration.add("CUSTOMER");
        newCalibration.add("LOCATION");
        newCalibration.add("VEHICLE");
        newCalibration.add("TEST");
        newCalibration.add("ABC");

        /* genarate data for list view */
        // genarateData();
        /* instantiate adapter with our item list */
        mCustomAdapter = new CustomAdapter(mContext, newCalibration);
        /* we get list view */
        mExpandableListView = (ExpandableListView) findViewById(R.id.explist_tools);
        /* set adapter to list view */
        mExpandableListView.setAdapter(mCustomAdapter);

        mExpandableListView
                .setOnGroupExpandListener(new OnGroupExpandListener() {

                    int previousGroup = -1;

                    @Override
                    public void onGroupExpand(int groupPosition) {
                        // TODO Auto-generated method stub
                        if (groupPosition != previousGroup) {
                            mExpandableListView.collapseGroup(previousGroup);
                            previousGroup = groupPosition;
                        }
                    }
                });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

CustomAdapter.java

public class CustomAdapter extends BaseExpandableListAdapter {

    private LayoutInflater layoutInflater;

    /* list of parent */
    private ArrayList<String> mParents;

    public CustomAdapter(Context context, ArrayList<String> parents) {
        super();
        this.mParents = parents;
        layoutInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public Object getChild(int parentPosition, int childPosition) {
        return null;
    }

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

    @Override
    public View getChildView(int parentPosition, int childPosition, boolean b,
            View convertView, ViewGroup viewGroup) {
        if (convertView == null) {
            convertView = layoutInflater
                    .inflate(R.layout.list_item_child, null);

        }
        EditText mEdTxt_1 = (EditText) convertView.findViewById(R.id.edtxt_1);
        EditText mEdTxt_2 = (EditText) convertView.findViewById(R.id.edtxt_2);
        EditText mEdTxt_3 = (EditText) convertView.findViewById(R.id.edtxt_3);
        EditText mEdTxt_4 = (EditText) convertView.findViewById(R.id.edtxt_4);
        EditText mEdTxt_5 = (EditText) convertView.findViewById(R.id.edtxt_5);
        RelativeLayout relativeLayout = (RelativeLayout) convertView
                .findViewById(R.id.relativeLayout);
        mEdTxt_1.setVisibility(View.VISIBLE);
        mEdTxt_2.setVisibility(View.VISIBLE);
        mEdTxt_3.setVisibility(View.VISIBLE);
        mEdTxt_4.setVisibility(View.VISIBLE);
        mEdTxt_5.setVisibility(View.VISIBLE);
        relativeLayout.setVisibility(View.VISIBLE);

        if (mParents.get(parentPosition).equals("CUSTOMER")) {
            mEdTxt_4.setVisibility(View.GONE);
            mEdTxt_5.setVisibility(View.GONE);
            relativeLayout.setVisibility(View.GONE);
        } else if (mParents.get(parentPosition).equals("LOCATION")) {
            mEdTxt_4.setVisibility(View.GONE);
            mEdTxt_5.setVisibility(View.GONE);
            relativeLayout.setVisibility(View.GONE);
        } else if (mParents.get(parentPosition).equals("VEHICLE")) {
            relativeLayout.setVisibility(View.GONE);
        } else if (mParents.get(parentPosition).equals("TAXIMETER/BCT")) {
            mEdTxt_3.setVisibility(View.GONE);
            mEdTxt_4.setVisibility(View.GONE);
            mEdTxt_5.setVisibility(View.GONE);
        } else if (mParents.get(parentPosition).equals("TIRE SPECS")) {
            mEdTxt_4.setVisibility(View.GONE);
            mEdTxt_5.setVisibility(View.GONE);
            relativeLayout.setVisibility(View.GONE);
        }
        return convertView;
    }

    @Override
    public int getChildrenCount(int parentPosition) {
        return 1;
    }

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

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

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

    @Override
    public View getGroupView(int parentPosition, boolean isExpanded,
            View convertView, ViewGroup viewGroup) {
        TextView groupName = null;
        String parent = (String) getGroup(parentPosition);
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_item_parent,
                    null);
        }
        groupName = (TextView) convertView.findViewById(R.id.txt_parentname);
        groupName.setText(parent);
        return convertView;
    }

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

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }

}

list_item_child.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_child"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edtxt_1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:inputType="text" />

    <EditText
        android:id="@+id/edtxt_2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:inputType="text" />

    <EditText
        android:id="@+id/edtxt_3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:inputType="text" />

    <EditText
        android:id="@+id/edtxt_4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:inputType="text" />

    <EditText
        android:id="@+id/edtxt_5"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:inputType="text" />

    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioGroup
            android:id="@+id/radio_group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="Radio 1" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Radio 2" />
        </RadioGroup>

        <TextView
            android:id="@+id/txt_childname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/radio_group"
            android:text="TaxiMeter ?"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <Switch
            android:id="@+id/switch1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/radio_group"
            android:text="Switch" />
    </RelativeLayout>

</LinearLayout>

图片: enter image description here

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:1)

您无法浏览列表并直接从视图中获取值,这可能是您计划进行的操作。

相反,只需在用户输入值时跟踪这些值。您可以保留字段名称的哈希映射 - &gt;适配器或活动中的值。每次用户更改字段中的值时,请使用hashmap中的新值更新该字段。按下完成后,您可以遍历地图以获取用户更改的所有字段列表以及更改它们的值。

要在用户更改字段时获取字段的值,请使用TextWatcher

myEditText.addTextChangedListener(new TextWatcher() {
    ...
    @Override
    onTextChanged(CharSequence newText, int start, int before, int count) {
        myMapOfFieldsToValues.set(myFieldName, newText);
    }
}

您可以将它添加到适配器中的getChildView。您可以从父级和子级的位置派生myFieldName。