我有一个模板页面,在这个页面上我可以添加和删除模板,为它们命名和描述。
每个模板都是一个由名称,描述,电源和启用组成的对象。
正确地跳到了问题所在。
我们可以移过第一个模板列表视图,但可以移动到下一个模板列表视图,即选项列表视图。
此列表视图仅包含2个选项,Power和Enable。以下是我创建这些选项的方法。
TEMPLATEPOWER("Turn on device", "Switching this will turn on and off the fitting"),
TEMPLATEENABLED("Enable Device", "Switching this will enable and disable the device");
控制文件:
public ArrayList<Option> populateTemplateActions() {
actions.add(Option.TEMPLATEPOWER);
actions.add(Option.TEMPLATEENABLED);
return actions;
}
现在设置列表视图。要做到这一点:
填充数组:
templateOptions = control.populateTemplateActions();
创建列表视图:
adapter = new TemplateOptionAdapter(
getActivity(), templateOptions, template, ViewTemplate.this);
templateOptionsView.setAdapter(adapter);
adapter.notifyDataSetChanged();
一旦我进入适配器,我就设置了文本视图和开关。然后,我通过在交换机上使用更改侦听器来处理设置电源和启用选项。
为了彻底,我将在下面发布整个适配器代码:
public class TemplateOptionAdapter extends BaseAdapter {
private Context context;
private ArrayList<Option> templateList;
private String name;
private Template template;
private Boolean checked;
int power;
int enable;
Option option;
ViewTemplate viewTemplate;
public TemplateOptionAdapter(Context context, ArrayList<Option> list, Template template, ViewTemplate viewTemplate) {
this.context = context;
templateList = list;
this.template = template;
this.viewTemplate = viewTemplate;
}
@Override
public int getCount() {
return templateList.size();
}
@Override
public Object getItem(int position) {
return templateList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
option = templateList.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.template_option_view_row, null);
}
TextView templateName = (TextView) convertView.findViewById(R.id.option_name);
TextView templateDesc = (TextView) convertView.findViewById(R.id.option_info);
SwitchCompat optionSwitch = convertView.findViewById(R.id.optionSwitch);
name = option.getOptionName();
String description = option.getOptionDesc();
templateName.setText(name);
templateDesc.setText(description);
power = template.getTemplatePower();
enable = template.getTemplateStatus();
// Sets switches to their database values
switch (option) {
case TEMPLATEPOWER:
if (power == 0) {
optionSwitch.setChecked(false);
}
else {
optionSwitch.setChecked(true);
}
break;
case TEMPLATEENABLED:
if (enable == 0) {
optionSwitch.setChecked(false);
}
else {
optionSwitch.setChecked(true);
}
break;
}
// Monitors changing of switches and sets objects to be saved.
optionSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
checked = true;
switch (option) {
case TEMPLATEPOWER:
template.setTemplatePower(1);
Log.i("power", "power setting to 1" + "");
Log.i("enable", "enable dosnt change" + "");
break;
case TEMPLATEENABLED:
template.setTemplateStatus(1);
Log.i("power", "power dosnt change" + "");
Log.i("enable", "enable setting to 1" + "");
break;
}
} else {
checked = false;
switch (option) {
case TEMPLATEPOWER:
template.setTemplatePower(0);
Log.i("power", "power setting to 1" + "");
Log.i("enable", "enable dosnt change" + "");
break;
case TEMPLATEENABLED:
template.setTemplateStatus(0);
Log.i("power", "power dosnt change" + "");
Log.i("enable", "enable setting to 0" + "");
break;
}
}
}
});
viewTemplate.setTemplate(template);
return convertView;
}
哇,如果你还和我在一起很棒,谢谢!
好的,所以手头的问题。
当我回到包含列表视图的片段中时,单击按钮进行保存时: 无论我切换,打开电源还是启用,启用选项都是唯一可以更改的值。例如:
所以在我的switch语句中,似乎从未见过TEMPLATEPOWER,即使它是其中一个选项。
我是一名新手Android开发者,我确信这是我逻辑上的一个缺陷,我只是看不到哪里!
任何建议都会很棒,谢谢!
如果您需要进一步澄清,请询问:)
答案 0 :(得分:0)
可能有更好的方法来执行这整个功能,但经过几个小时的尝试修复我的案例,我已经管理了一些事情。
我在适配器中使用列表位置获取对象选项时,我应该将其设置为final,因为它会不断更改值。
我改变了:
option = templateList.get(position);
要:
final Option option = templateList.get(position);