【问题标题】:Set values of components of all Child views in Expandable List设置可展开列表中所有子视图的组件值
【发布时间】:2016-08-02 02:33:42
【问题描述】:

我有一个表示程序中设置的可扩展列表。组视图有一个 TextView 描述和一个代表重置的 Button。子视图有一个 TextView 描述,其中一个 EditText 代表一个单独的设置。

EditText 的值保存在外部变量中,并在任何更改时更新。单击组视图中的重置按钮后,我想将 EditTexts 中包含的所有单独设置重置为默认值。这可行,但在重新绘制子视图之前,EditTexts 视图当然不会更新。我希望点击重置按钮后视图立即全部更改。

我尝试了很多方法,但总是遇到问题。我似乎无法访问重置按钮侦听器中的 EditText 视图来以编程方式设置文本。

我的展开式列表(删节):

public class ExpandableListAdapter extends BaseExpandableListAdapter
{
private String[] listGroups;
private String[][] listChilds;
private Activity context;
final EditText[] etIndividualLetterValues = new EditText[26];

public ExpandableListAdapter(Activity context, String[] listGroups, String[][] listChilds)
    {
    this.context = context;
    this.listGroups = listGroups;
    this.listChilds = listChilds;

@Override
public View getChildView(final int listGroupPosition, final int listChildPosition, boolean isLastChild,
                         View view, ViewGroup viewGroup)
    {
    LayoutInflater inflater = context.getLayoutInflater();
    TextView tvListItemGeneral;

    tvListItemGeneral = (TextView) view.findViewById(R.id.TV_list_item_general);
    tvListItemGeneral.setText(getChild(listGroupPosition, listChildPosition).toString());

    etIndividualLetterValues[listChildPosition] = (EditText) view.findViewById(R.id.ET_list_item_settings_value);
    etIndividualLetterValues[listChildPosition].setText(String.format("%d", Settings.settingsCurrent[listGroupPosition][listChildPosition]));

    etIndividualLetterValues[listChildPosition].addTextChangedListener(new TextWatcher()
        {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
            }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
            {
            Settings.settingsCurrent[listGroupPosition][listChildPosition] = Integer.parseInt(s.toString());
            }
        @Override
        public void afterTextChanged(Editable s)
            {

            }
        }); 
    }

@Override
public View getGroupView(final int listGroupPosition, boolean isExpanded, View view, ViewGroup viewGroup)
    {
    LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if(view == null)
        {
        view = layoutInflater.inflate(R.layout.list_group, viewGroup, false);
        }
    TextView tvListGroup = (TextView) view.findViewById(R.id.TV_list_group);
    Button buttonSettingsReset = (Button) view.findViewById(R.id.B_settings_reset);
    buttonSettingsReset.setOnClickListener(new View.OnClickListener()
        {
        @Override
        public void onClick(View v)
            {
            if(listGroupPosition == C.INDIVIDUAL_LETTER_VALUES)
                {
                for(int i=0; i<26; i++)
                    {
                    etIndividualLetterValues[i].setText(String.format("%d", Settings.settingsDefault[C.INDIVIDUAL_LETTER_VALUES][i]));
                    }
                }
            }
        });
    tvListGroup.setText(getGroup(listGroupPosition).toString());
    return view;
    }       

代码行:

etIndividualLetterValues[i].setText(String.format("%d", Settings.settingsDefault[C.INDIVIDUAL_LETTER_VALUES][i]));

给出一个 NPE。

【问题讨论】:

    标签: android expandablelistview expandablelistadapter


    【解决方案1】:

    经过多次搜索(并改写我的搜索!)我发现了 notifyDataSetChanged(); 方法;

    所以我所做的只是向按钮单击侦听器添加一个方法,该方法调用一个方法来重置设置,然后调用 notifyDataSetChanged():

    buttonSettingsReset.setOnClickListener(new View.OnClickListener()
        {
        @Override
        public void onClick(View v)
            {
            if(listGroupPosition == C.INDIVIDUAL_LETTER_VALUES)
                {
                refresh(listGroupPosition);
                }
            }
        });
    
    //...
    
    public void refresh(int settingsID)
        {
        resetSettingsClick(context, settingsID);
        this.notifyDataSetChanged();
        }
    

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2011-05-31
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      相关资源
      最近更新 更多