簡體   English   中英

Android:getChild()在ExpandableListView中單擊按鈕時的EditText值

[英]Android : getChild() EditText values on button click in 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>

圖片 : 在此輸入圖像描述

在此輸入圖像描述

謝謝!

您無法通過列表直接從視圖中獲取值,這可能是您計划進行的操作。

相反,只需在用戶輸入值時跟蹤值。 您可以在適配器或活動中保留字段名稱 - >值的哈希映射。 每次用戶更改字段中的值時,請使用hashmap中的新值更新該字段。 按下完成后,您可以遍歷地圖以獲取用戶更改的所有字段列表以及更改它們的值。

要在用戶更改字段時獲取字段的值,請使用TextWatcher

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

您可以將它添加到適配器中的getChildView。 您可以從父級和子級的位置派生myFieldName。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM