- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,用户将从不同的团队中选择球员。在屏幕顶部有计数,显示总数。所选球员的数量和每支球队的行数将显示总数。从该队中选出的球员。
我正面临 ArrayAdapter
的意外行为。
问题:-
getView()
方法为数组列表中的每个元素调用五次。代码:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/lLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fa8765"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="15dp" >
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="left"
android:text="@string/selected" />
<TextView
android:id="@+id/tViewNoOfSelectionOnTop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:textStyle="bold"
android:text="0" />
</LinearLayout>
<ListView
android:id="@+id/lView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lLayout" >
</ListView>
父类.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#9999ff"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:id="@+id/tViewTeamName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Team Name" />
<TextView
android:id="@+id/tViewNoOfSelectionFrmPatent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="0" />
</RelativeLayout>
子.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f1fbf2"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="8dp" >
<TextView
android:id="@+id/tViewPlayerName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Player Name" />
<ImageView
android:id="@+id/iViewCheckUnCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:src="@drawable/un_mark" />
</RelativeLayout>
主 Activity .java
public class MainActivity extends Activity {
private Context context;
private ListView lView;
private ArrayAdapter<Team> aAdapterTeam;
private List<Team> listTeam;
private TextView tViewNoOfSelectionOnTop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = MainActivity.this;
tViewNoOfSelectionOnTop = (TextView) findViewById(R.id.tViewNoOfSelectionOnTop);
lView = (ListView) findViewById(R.id.lView);
listTeam = new ArrayList<Team>();
loadData();
aAdapterTeam = new TeamAdapter(context, 0, listTeam, tViewNoOfSelectionOnTop);
lView.setAdapter(aAdapterTeam);
}
private void loadData() {
Team team = new Team("Team A", 0);
Team[] teamPlayers = new Team[5];
teamPlayers[0] = new Team("Player A1", 1, team);
teamPlayers[1] = new Team("Player A2", 1, team);
teamPlayers[2] = new Team("Player A3", 1, team);
teamPlayers[3] = new Team("Player A4", 1, team);
teamPlayers[4] = new Team("Player A5", 1, team);
team.addPlayers(teamPlayers);
listTeam.add(team);
team = new Team("Team B", 0);
teamPlayers = new Team[4];
teamPlayers[0] = new Team("Player B1", 1, team);
teamPlayers[1] = new Team("Player B2", 1, team);
teamPlayers[2] = new Team("Player B3", 1, team);
teamPlayers[3] = new Team("Player B4", 1, team);
team.addPlayers(teamPlayers);
listTeam.add(team);
team = new Team("Team C", 0);
teamPlayers = new Team[3];
teamPlayers[0] = new Team("Player C1", 1, team);
teamPlayers[1] = new Team("Player C2", 1, team);
teamPlayers[2] = new Team("Player C3", 1, team);
team.addPlayers(teamPlayers);
listTeam.add(team);
}
}
团队适配器.java
public class TeamAdapter extends ArrayAdapter<Team>{
private Context context;
private int resourceId;
private List<Team> listTeam;
private TextView tViewNoOfSelectionOnTop;
private int countSelectionOnTop = 0;
// private int pos = 0;
// private Team rowData = null;
private TextView tViewNoOfSelectionFrmPatent = null;
private int rowCount = 0;
public TeamAdapter(Context context, int resourceId,
List<Team> teams, TextView tViewNoOfSelection) {
super(context, resourceId, teams);
this.context = context;
this.resourceId = resourceId;
this.listTeam = teams;
this.tViewNoOfSelectionOnTop = tViewNoOfSelection;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
rowCount++;
final int pos = position;
final Team rowData = listTeam.get(pos);
// pos = position;
// rowData = listTeam.get(pos);
System.out.println("Row Count(Position): " + position + ", pos: " + pos + ", Row Count2: " + rowCount);
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
if (rowData.getType() == Team.TYPE_Team) {
convertView = inflater.inflate(R.layout.parent, parent, false);
} else if (rowData.getType() == Team.TYPE_Player) {
convertView = inflater.inflate(R.layout.child, parent, false);
}
if (rowData.getType() == Team.TYPE_Team) {
System.out.println("Type Team");
TextView tViewTeamName = (TextView) convertView.findViewById(R.id.tViewTeamName);
TextView tViewNoOfSelectionFrmPatent = (TextView) convertView.findViewById(R.id.tViewNoOfSelectionFrmPatent);
tViewTeamName.setText(rowData.getStrName());
rowData.settViewNoOfSelectionFrmPatent(tViewNoOfSelectionFrmPatent);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rowData.toggleExpansion(TeamAdapter.this, pos);
}
});
} else if (rowData.getType() == Team.TYPE_Player) {
System.out.println("Type Player");
final ImageView iViewCheckUnCheck = (ImageView) convertView.findViewById(R.id.iViewCheckUnCheck);
TextView tViewPlayerName = (TextView) convertView.findViewById(R.id.tViewPlayerName);
tViewNoOfSelectionFrmPatent = rowData.getParent().gettViewNoOfSelectionFrmPatent();
System.out.println("TextView2 Id: " + tViewNoOfSelectionFrmPatent.getId());
tViewPlayerName.setText(rowData.getStrName());
if (rowData.isSelected()) iViewCheckUnCheck.setImageResource(R.drawable.mark);
else iViewCheckUnCheck.setImageResource(R.drawable.un_mark);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("Player Clicked");
rowData.toggleSelection();
int a = Integer.valueOf(tViewNoOfSelectionFrmPatent.getText().toString());
if (rowData.isSelected()) {
System.out.println("Player Selected");
a++;
countSelectionOnTop++;
iViewCheckUnCheck.setImageResource(R.drawable.mark);
} else {
System.out.println("Player Unselected");
a--;
countSelectionOnTop--;
iViewCheckUnCheck.setImageResource(R.drawable.un_mark);
}
tViewNoOfSelectionOnTop.setText(String.valueOf(countSelectionOnTop));
tViewNoOfSelectionFrmPatent.setText(String.valueOf(a));
}
});
}
return convertView;
}
}
团队.java
public class Team {
public static final int TYPE_Team = 0;
public static final int TYPE_Player = 1;
private String strName;
private boolean isSelected;
private Team[] players;
private Team parent;
private int type;
private boolean isExpanded = false;
private TextView tViewNoOfSelectionFrmPatent;
public Team(String strName, int type) {
super();
this.strName = strName;
this.type = type;
}
public Team(String strName, int type, Team parent) {
super();
this.strName = strName;
this.type = type;
this.parent = parent;
}
public void toggleExpansion(TeamAdapter teamAdapter, int pos) {
isExpanded = !isExpanded;
if (isExpanded) {
for (Team player : players) {
pos++;
teamAdapter.insert(player, pos);
}
} else {
for (Team player : players) {
teamAdapter.remove(player);
}
}
}
public void toggleSelection() {
isSelected = !isSelected;
/*for (Team player : parent.getPlayers()) {
if (player.isSelected) {
parent.isSelected = true;
}
}*/
}
public boolean hasChildren() {
return players != null;
}
public void addPlayers(Team[] players){
this.players = players;
}
private Team[] getPlayers(){
return players;
}
public String getStrName() {
return strName;
}
public boolean isSelected() {
return isSelected;
}
public Team getParent() {
return parent;
}
public void setParent(Team parent) {
this.parent = parent;
}
public int getType() {
return type;
}
public TextView gettViewNoOfSelectionFrmPatent() {
return tViewNoOfSelectionFrmPatent;
}
public void settViewNoOfSelectionFrmPatent(
TextView tViewNoOfSelectionFrmPatent) {
System.out.println("TextView Id: " + tViewNoOfSelectionFrmPatent.getId());
this.tViewNoOfSelectionFrmPatent = tViewNoOfSelectionFrmPatent;
}
}
LogCat:-
04-13 10:15:22.948: I/System.out(2761): Row Count(Position): 0, pos: 0, Row Count2: 1
04-13 10:15:22.949: I/System.out(2761): Type Team
04-13 10:15:22.949: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:22.949: I/System.out(2761): Row Count(Position): 1, pos: 1, Row Count2: 2
04-13 10:15:22.949: I/System.out(2761): Type Team
04-13 10:15:22.949: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:22.949: I/System.out(2761): Row Count(Position): 2, pos: 2, Row Count2: 3
04-13 10:15:22.951: I/System.out(2761): Type Team
04-13 10:15:22.951: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.013: W/EGL_emulation(2761): eglSurfaceAttrib not implemented
04-13 10:15:23.013: W/OpenGLRenderer(2761): Failed to set EGL_SWAP_BEHAVIOR on surface 0xa5e45da0, error=EGL_SUCCESS
04-13 10:15:23.087: I/System.out(2761): Row Count(Position): 0, pos: 0, Row Count2: 4
04-13 10:15:23.087: I/System.out(2761): Type Team
04-13 10:15:23.088: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.088: I/System.out(2761): Row Count(Position): 1, pos: 1, Row Count2: 5
04-13 10:15:23.088: I/System.out(2761): Type Team
04-13 10:15:23.088: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.088: I/System.out(2761): Row Count(Position): 2, pos: 2, Row Count2: 6
04-13 10:15:23.088: I/System.out(2761): Type Team
04-13 10:15:23.088: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.089: I/System.out(2761): Row Count(Position): 0, pos: 0, Row Count2: 7
04-13 10:15:23.090: I/System.out(2761): Type Team
04-13 10:15:23.090: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.090: I/System.out(2761): Row Count(Position): 1, pos: 1, Row Count2: 8
04-13 10:15:23.090: I/System.out(2761): Type Team
04-13 10:15:23.090: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.090: I/System.out(2761): Row Count(Position): 2, pos: 2, Row Count2: 9
04-13 10:15:23.091: I/System.out(2761): Type Team
04-13 10:15:23.091: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.092: I/System.out(2761): Row Count(Position): 0, pos: 0, Row Count2: 10
04-13 10:15:23.092: I/System.out(2761): Type Team
04-13 10:15:23.093: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.093: I/System.out(2761): Row Count(Position): 1, pos: 1, Row Count2: 11
04-13 10:15:23.093: I/System.out(2761): Type Team
04-13 10:15:23.093: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.093: I/System.out(2761): Row Count(Position): 2, pos: 2, Row Count2: 12
04-13 10:15:23.093: I/System.out(2761): Type Team
04-13 10:15:23.093: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.148: I/System.out(2761): Row Count(Position): 0, pos: 0, Row Count2: 13
04-13 10:15:23.148: I/System.out(2761): Type Team
04-13 10:15:23.148: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.148: I/System.out(2761): Row Count(Position): 1, pos: 1, Row Count2: 14
04-13 10:15:23.149: I/System.out(2761): Type Team
04-13 10:15:23.149: I/System.out(2761): TextView Id: 2131099654
04-13 10:15:23.149: I/System.out(2761): Row Count(Position): 2, pos: 2, Row Count2: 15
04-13 10:15:23.149: I/System.out(2761): Type Team
04-13 10:15:23.149: I/System.out(2761): TextView Id: 2131099654
最佳答案
我认为,您想制作一个 ListView,其中 Teams 是 parent ,Players 是 child 。
Quoting安卓工程师 RomainGuy
This is not an issue, there is absolutely no guarantee on the order in which getView() will be called nor how many times.
据我了解,由于这些分配的 layout_height="wrap_content"
适配器会输入很多时间来计算特定高度。
您需要将 layout_height="match_parent"
放在 ListView
中以避免这种行为。
我对你的代码有一些观察:
ListView
而不是 ExpandableListView
?这是一个更好的选择。child.xml
中最好使用 CheckBox
而不是 ImageView
。只需要更改 CheckBox View 样式即可。我接受了你的代码并重构了它,你可以在我的 GitHub 上查看 https://github.com/cesardl/android-training
关于android - ArrayAdapter 为每一行调用 getView 五次并产生意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29598154/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
当我尝试在 db2 中创建表时,它抛出以下错误 $ db2 CREATE TABLE employee(emp_id INT NOT NULL, emp_name VARCHAR(100)) sh:
我有: while (i < l) { if (one === two) { continue; } i++; } 但是 JSLint 说: Problem at line 1 chara
所以我有这个代码: char inputs[10] = ""; int numInputs = 0; while (numInputs < 10){ char c; printf("E
var ninja = { name: 'Ninja', say: function () { return 'I am a ' + this.name; }
我收到一个我不明白的错误,请注意,我是编码新手,所以这可能是一个简单的错误。 #include using namespace std; int main() { //Initialise Fahr
我正在使用 javascript 和 react,由于某种原因,我收到了一个奇怪的 token 错误。 这是发生错误的代码: renderNavBar() { if (!this.us
Closed. This question is off-topic。它当前不接受答案。
由于某种我无法解释的原因,编译器正在输出一个错误,指出它发现了一个意外的#else 标记。 这发生在文件的开头: #if defined( _USING_MFC ) #include "stda
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这个问题在这里已经有了答案: Difference between sh and Bash (11 个答案) 关闭 2 年前。 我正在编写一个简单的 bash 脚本,我在 XX `(' unexpe
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic
我在 Windows 7 上编写了一个脚本,它不断给我一个错误“(此时出乎意料。”对于以下代码 if %vardns%=="NODNS" ( netsh interface ipv4 set ad
我正在尝试使用xmlstarlet(使用xpath)解析XML文件,但是出现语法错误,并且我不知道如何更正我的代码。 这是我的脚本: #!/bin/bash if [ $1=="author" ];
以下脚本旨在在目录中的所有文件上运行程序“senna”,并将每个文件的输出(保留输入文件名)写入另一个目录 for file in ./Data/in/*; do ./senna -iobta
我从 challengers.coffee 运行此代码,并收到错误 ActionView::Template::Error (SyntaxError: [stdin]:3:31:unexpected
我在 config.db.database; 行中有语法错误(意外的标记“.”)。这是我在文件中的代码 const config = require('../config/config') const
这一定很明显,但是我无法使它正常工作。我正在尝试传输应该用于构建$ classKey的对象,这反过来又导致删除所需的软件(amd64或i386)。好吧,这里的代码: $name = @("softwa
我正在使用 1.3.7 版学习 Grails,但我一直无缘无故地遇到以下语法错误: unexpected token: mapping @ line x, column y. 有一次,我通过运行“gr
我正在尝试找出这段Pascal代码的问题 function Factorial(n: integer): integer; begin if n = 0 then Result := 1
我是一名优秀的程序员,十分优秀!