我使用自定义适配器创建了自定义ListView。我有一个定义每一行的xml文件,每行都有一个在此xml文件中定义的复选框。我的应用程序是一个评判应用程序,ListView上的每个项目都是一个计算一定数量点数的“任务”。我们的想法是,如果任务完成,那么法官会点击复选框,并将该任务的分数添加到总分中。
不幸的是,我认为没有办法让这个值与复选框相关联。有没有办法做到这一点?我会发布一些代码,我希望能够全面了解我的问题。
行的XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/score_list_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<CheckBox
android:id="@+id/score_box"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:paddingTop="30dp"
android:scaleX="2"
android:scaleY="2"
android:onClick="chkBoxClicked" />
<TextView
android:id="@+id/subtask"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/score_box"
android:paddingRight="30dp"
android:textSize="20sp"/>
<TextView
android:id="@+id/max_points"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/subtask" />
</RelativeLayout>
创建列表的活动中的方法:
...
public void createScoringList() {
ListView scoreList = (ListView) findViewById(R.id.score_list);
ListView scoreListPartial = (ListView) findViewById(R.id.score_list_partial);
ArrayList<ScoringInfo> objList = new ArrayList<ScoringInfo>();
ArrayList<ScoringInfo> objListPartial = new ArrayList<ScoringInfo>();
ScoringInfo scrInfo;
for (int i = 0; i < subTaskList.size(); i++) {
subtask_num = subTaskList.get(i).subtask_num;
max_points = subTaskList.get(i).max_points;
partial_points_allowed = subTaskList.get(i).partial_points_allowed;
task_name = subTaskList.get(i).task_name;
scrInfo = new ScoringInfo();
scrInfo.setMaxPoints("Max Points: " + max_points);
scrInfo.setSubtask(task_name);
if (partial_points_allowed == 1)
objListPartial.add(scrInfo);
else
objList.add(scrInfo);
}
scoreList.setAdapter(new ScoreListAdapter(objList , this));
scoreListPartial.setAdapter(new ScoreListAdapter2(objListPartial, this));
}
如果需要更多代码以便清楚,请询问,我会提供。我只是不想用我认为可能不必要的大量代码来解决这个问题。
答案 0 :(得分:2)
您可以将此值存储在模型中(我认为它称为ScoringInfo),或者您可以使用setTag("score", value)
方法将此值分配给每个复选框,并通过调用getTag("score")
来读取它。
您可以像这样设置和读取适配器类中的标记。您的适配器应实现OnClickListener
并管理ScoringInfo
项目列表。
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(this)
.inflate(R.layout.<your_layout>, parent, false);
}
ScoringInfo item = this.getItem(position);
CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.checkbox_id);
checkBox.setTag("score", item.max_points);
checkBox.setOnClickListener(this);
}
public void onClick(View view) {
if (view instanceof CheckBox) {
boolean checked = ((CheckBox) view).isChecked();
int score = view.getTag("score");
// do the rest
}
}