Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在ExpandableListView中调用notifyDataSetChanged()时失去焦点_Android_Expandablelistview - Fatal编程技术网

Android 在ExpandableListView中调用notifyDataSetChanged()时失去焦点

Android 在ExpandableListView中调用notifyDataSetChanged()时失去焦点,android,expandablelistview,Android,Expandablelistview,我有一个ExpandableListView,其中包含2个TextViews和一个EditText,用于输入每个孩子的金额,并允许内联编辑 当组的一个子组的金额发生更改时,我需要立即更改组的金额值 我已经这样做了,但问题是,当我调用notifyDataSetChanged()方法来显示组中的更改时,我失去了当前edittext的焦点。也就是说,如果我更改了组的第一个子项中的“金额”字段,然后单击第二个子项的“金额”字段,则由于notifyDataSetChanged(),焦点仍在第一个子项上 我

我有一个
ExpandableListView
,其中包含2个
TextView
s和一个
EditText
,用于输入每个孩子的金额,并允许内联编辑

当组的一个子组的金额发生更改时,我需要立即更改组的金额值

我已经这样做了,但问题是,当我调用
notifyDataSetChanged()
方法来显示组中的更改时,我失去了当前
edittext
的焦点。也就是说,如果我更改了组的第一个子项中的“金额”字段,然后单击第二个子项的“金额”字段,则由于
notifyDataSetChanged()
,焦点仍在第一个子项上

我怎样才能解决这个问题

我的代码如下

ExpandableListAdapter.java:

package com.example.empandroid.view;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;

import com.fort.empandroid.R;
import com.example.empandroid.model.Employee;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Typeface;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.BaseExpandableListAdapter;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class ExpandableListAdapter extends BaseExpandableListAdapter {
    private final Context context;
    private List<Employee> listDataHeader;
    private HashMap<Integer, List<Employee>> listDataChild;
    DecimalFormat df = new DecimalFormat("#.00");
    int s;
    Float value = 0.0f, change = 0.0f;

    public ExpandableListAdapter(Context context, List<Employee> listDataHeader, HashMap<Integer, List<Employee>> listChildData) {
        this.context = context;
        this.listDataHeader = listDataHeader;
        this.listDataChild = listChildData;
        //this.context=mainContxt.getApplicationContext();
    }

    public static class ListHolder {
        Employee expCoa;
        TextView txtName;
        TextView txtAmount;
        TextView txtMonthTotal;
        EditText edtAmount;
    }

    @Override
    public int getGroupCount() {
        return this.listDataHeader.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        int childcount = this.listDataChild.get(this.listDataHeader.get(groupPosition).getiD()).size();
        return childcount;
    }

    @Override
    public Employee getGroup(int groupPosition) {
        return this.listDataHeader.get(groupPosition);
    }

    @Override
    public Employee getChild(int groupPosition, int childPosition) {
        return this.listDataChild.get(this.listDataHeader.get(groupPosition).getiD()).get(childPosition);
    }

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

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        df.setMinimumIntegerDigits(1);
        ListHolder expHolder = new ListHolder();
        expHolder.expCoa = getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);
        }

        expHolder.txtName = (TextView) convertView.findViewById(R.id.txtAccount);
        expHolder.txtAmount = (TextView) convertView.findViewById(R.id.txtAmount);
        expHolder.txtMonthTotal = (TextView) convertView.findViewById(R.id.txtMonthTotal);
        convertView.setTag(expHolder);
        expHolder.txtName.setTypeface(null, Typeface.BOLD);
        expHolder.txtAmount.setTypeface(null, Typeface.BOLD);
        expHolder.txtMonthTotal.setTypeface(null, Typeface.BOLD);
        setupItem(expHolder);

        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
        df.setMinimumIntegerDigits(1);
        final ListHolder expHolder = new ListHolder();
        expHolder.expCoa = getChild(groupPosition, childPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);
        }

        expHolder.txtName = (TextView) convertView.findViewById(R.id.txtAccount);
        expHolder.edtAmount = (EditText) convertView.findViewById(R.id.edtAmount);
        expHolder.txtMonthTotal = (TextView) convertView.findViewById(R.id.txtMonthTotal);
        convertView.setTag(expHolder);
        setupChildItem(expHolder);
        //expHolder.edtAmount.requestFocus();
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        final AlertDialog dialog = builder.create();
        //AlertDialog.Builder alert = new AlertDialog.Builder(mainContxt);
        expHolder.edtAmount.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    //dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                    onChange(v, groupPosition, childPosition, expHolder.expCoa);

                } else {
                    //Toast.makeText(context, " else "+s, 68000).show();
                    onFocus(v);
                }
            }
        });
        return convertView;
    }

    private void onFocus(View v) {
        final EditText Caption = (EditText) v;
        value = Float.parseFloat(Caption.getText().toString());
        Toast.makeText(context, "onFocus value " + value + " change " + change, 68000).show();
    }

    public void onChange(View views, int groupPosition, int childPosition, Employee expCoaChd) {
        final int position = views.getId();
        final EditText Caption = (EditText) views;
        change = Float.parseFloat(Caption.getText().toString());
        if (value != change) { //use database type for this loop condition
            //perform change
            ListHolder expHolders = new ListHolder();
            expHolders.expCoa = getGroup(groupPosition);
            expHolders.expCoa.setAmount(expHolders.expCoa.getAmount() - expCoaChd.getAmount() + change);
            expCoaChd.setAmount(change);
            notifyDataSetChanged();
            //Toast.makeText(context, "onChange value "+value+" change "+change, 68000).show();
            change = 0.0f;
            value = 0.0f;
        }
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    private void setupChildItem(ListHolder expHolder) {
        expHolder.txtName.setText(expHolder.expCoa.getStrName());
        if (expHolder.expCoa.getiD() == -998 || expHolder.expCoa.getiD() == -999) {
            expHolder.edtAmount.setText("");
            expHolder.txtMonthTotal.setText("");
        } else {
            expHolder.edtAmount.setText(df.format(expHolder.expCoa.getAmount()));
            expHolder.txtMonthTotal.setText(df.format(expHolder.expCoa.getExpenseMTD()));
        }
    }

    private void setupItem(ListHolder expHolder) {
        expHolder.txtName.setText(expHolder.expCoa.getStrName());
        if (expHolder.expCoa.getiD() == -998 || expHolder.expCoa.getiD() == -999) {
            expHolder.txtAmount.setText("");
            expHolder.txtMonthTotal.setText("");
        } else {
            expHolder.txtAmount.setText(df.format(expHolder.expCoa.getAmount()));
            expHolder.txtMonthTotal.setText(df.format(expHolder.expCoa.getExpenseMTD()));
        }
    }

}
package com.example.empanroid.view;
导入java.text.DecimalFormat;
导入java.util.HashMap;
导入java.util.List;
导入com.fort.empanroid.R;
导入com.example.empanroid.model.Employee;
导入android.app.AlertDialog;
导入android.app.Dialog;
导入android.content.Context;
导入android.graphics.Typeface;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnFocusChangeListener;
导入android.view.ViewGroup;
导入android.view.WindowManager;
导入android.widget.BaseExpandableListAdapter;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
公共类ExpandableListAdapter扩展了BaseExpandableListAdapter{
私人最终语境;
私有列表listDataHeader;
私有HashMap listDataChild;
DecimalFormat df=新的DecimalFormat(#.00”);
int-s;
浮动值=0.0f,变化=0.0f;
公共ExpandableListAdapter(上下文上下文、列表listDataHeader、HashMap listChildData){
this.context=上下文;
this.listDataHeader=listDataHeader;
this.listDataChild=listChildData;
//this.context=mainContxt.getApplicationContext();
}
公共静态类列表持有者{
雇员出口证;
TextView-txtName;
TextView txtAmount;
TextView-txtMonthTotal;
编辑文本数量;
}
@凌驾
public int getGroupCount(){
返回此.listDataHeader.size();
}
@凌驾
公共整数getChildrenCount(整数组位置){
int childcount=this.listDataChild.get(this.listDataHeader.get(groupPosition.getiD()).size();
返回childcount;
}
@凌驾
公共雇员getGroup(int groupPosition){
返回此.listDataHeader.get(groupPosition);
}
@凌驾
公共雇员getChild(int-groupPosition,int-childPosition){
返回this.listDataChild.get(this.listDataHeader.get(groupPosition.getiD()).get(childPosition);
}
@凌驾
公共长getGroupId(int-groupPosition){
返回组位置;
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回子位置;
}
@凌驾
公共布尔表ID(){
返回false;
}
@凌驾
公共视图getGroupView(int groupPosition、布尔isExpanded、视图convertView、视图组父级){
df.设置最小整数位数(1);
ListHolder expHolder=新ListHolder();
expHolder.expCoa=getGroup(groupPosition);
if(convertView==null){
LayoutInflater INFLATER=(LayoutInflater)this.context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
convertView=infalInflater.充气(R.layout.list_组,空);
}
expHolder.txtName=(TextView)convertView.findViewById(R.id.txtAccount);
expHolder.txtAmount=(TextView)convertView.findViewById(R.id.txtAmount);
expHolder.txtMonthTotal=(TextView)convertView.findViewById(R.id.txtMonthTotal);
convertView.setTag(expHolder);
expHolder.txtName.setTypeface(null,Typeface.BOLD);
expHolder.txtAmount.setTypeface(null,Typeface.BOLD);
expHolder.txtMonthTotal.setTypeface(null,Typeface.BOLD);
项目(持有人);
返回视图;
}
@凌驾
公共视图getChildView(最终int groupPosition,最终int childPosition,
布尔值isLastChild、视图转换视图、视图组父级){
df.设置最小整数位数(1);
最终ListHolder expHolder=新ListHolder();
expHolder.expCoa=getChild(groupPosition,childPosition);
if(convertView==null){
LayoutInflater INFLATER=(LayoutInflater)this.context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
convertView=infalInflater.充气(R.layout.list_项,空);
}
expHolder.txtName=(TextView)convertView.findViewById(R.id.txtAccount);
expHolder.edtAmount=(EditText)convertView.findViewById(R.id.edtAmount);
expHolder.txtMonthTotal=(TextView)convertView.findViewById(R.id.txtMonthTotal);
convertView.setTag(expHolder);
项目(出口持有人);
//expHolder.edtmount.requestFocus();
AlertDialog.Builder=新建AlertDialog.Builder(上下文);
最终AlertDialog=builder.create();
//AlertDialog.Builder alert=新建AlertDialog.Builder(mainContxt);
expHolder.edtmount.setOnFocusChangeListener(新的OnFocusChangeListener(){
@凌驾
public void onFocusChange(视图v,布尔hasFocus){
如果(!hasFocus){
//dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入\u状态\u始终可见);
onChange(v,groupPosition,childPosition,expHolder.expCoa);
}否则{
//makeText(上下文,“else”+s,68000).show();
聚焦(五);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" 
>
<TextView
    android:id="@+id/txtAccount"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:textSize="16sp"
    android:gravity="center_vertical"
    android:layout_weight="3"/>

<TextView
    android:id="@+id/txtAmount"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:gravity="end"
    android:textSize="15sp"
    android:textAppearance="?android:attr/textAppearanceSmall"/>

<TextView
    android:id="@+id/txtMonthTotal"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:gravity="end"
    android:textSize="15sp"
    android:textAppearance="?android:attr/textAppearanceSmall"/>

 </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" 
>
<TextView
    android:id="@+id/txtAccount"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:textSize="15sp"
    android:gravity="center_vertical"
    android:layout_weight="3"/>

<EditText
    android:id="@+id/edtAmount"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:gravity="end"
    android:textSize="15sp"
    android:textAppearance="?android:attr/textAppearanceSmall"/>

<TextView
    android:id="@+id/txtMonthTotal"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:gravity="end"
    android:textSize="15sp"
    android:textAppearance="?android:attr/textAppearanceSmall"/>

</LinearLayout>