我的listview有问题。我使用
添加了标题视图listView.addHeaderView(header, null, false);
它正在工作。我使用它来防止在列表项中计算标题视图。此标题视图具有展开/折叠图标。因此,最初,标题视图已折叠,并且只能通过省略号查看截断的文本。单击展开图标时,它应该展开(我已经编码了展开/折叠动画)。
这是我尝试过的:
MainActivity
episodesAdapter = new CustomAdapter(this, this, itemList);
listView.setAdapter(episodesAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (commentView.getVisibility() == View.GONE) {
episodesAdapter.setItemSelected(position);
Log.e(TAG, "LV POS: " + position);
TextView title = (TextView) view.findViewById(R.id.tvListTitle);
TextView details = (TextView) view.findViewById(R.id.tvDetails);
setDetails(title.getText().toString(), details.getText().toString());
} });
列表中的选定项目显示在标题视图中(详细信息)。
CustomAdapter
@Override
public int getCount() {
return data.size();
}
@Override
public HashMap<String, String> getItem(int position) {
if(data.get(position) != null) {
return data.get(position);
} else {
return null;
}
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
try {
if (convertView == null) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_video_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
viewHolder.tvDetails = (TextView) convertView.findViewById(R.id.tvListDetails);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
result = new HashMap<>();
result = data.get(position);
viewHolder.tvTitle.setText(result.get(Constants.TITLE));
viewHolder.tvDetails.setText(result.get(Constants.DESCRIPTION));
if(mItemSelected == position){
convertView.setSelected(true);
activity.setDetails(result.get(Constants.TITLE), result.get(Constants.DESCRIPTION) );
}
else {
convertView.setSelected(false);
}
} catch (Exception e ) {
}
return convertView;
}
private int mItemSelected = 0;
public void setItemSelected(int position){
mItemSelected = position;
}
仅供参考,我将listview设置为SINGLE_CHOICE,以突出显示所选项目。但我得到正确的项目位置有问题,我的第一个项目变为1而不是0.当我展开我的标题视图时,它将所选项目(第一个/默认项目)替换为下一个项目(列表中的第二个项目) )当我折叠我的标题视图时,它会返回到最初选择的项目。这里似乎有什么问题?几个星期以来,我一直坚持这个问题。我无法继续。我真的很感激任何帮助。谢谢!
标题视图:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/rlHolder"
android:paddingTop="15dp"
android:paddingBottom="5dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:background="@color/main_blue"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="@color/white"
android:id="@+id/tvTitle"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true" />
<TextView
android:id="@+id/tvDetails"
android:layout_marginTop="10dp"
android:textColor="@color/white"
android:singleLine="true"
android:ellipsize="end"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:visibility="gone"
android:id="@+id/lAdditionalView"
android:layout_below="@+id/tvDetails"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="Cast"
android:id="@+id/tvCastHolder"
android:textSize="18sp"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<TextView
android:id="@+id/tvCasts"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<TextView
android:text="Genre"
android:id="@+id/tvGenreHolder"
android:textSize="18sp"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<TextView
android:id="@+id/tvGenres"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<TextView
android:text="Views"
android:id="@+id/tvViewsHolder"
android:textSize="18sp"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
<TextView
android:id="@+id/tvViews"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" />
</LinearLayout>
<ImageView
android:id="@+id/ivArrow"
android:src="@drawable/chatarrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_below="@+id/lAdditionalView"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</RelativeLayout>
答案 0 :(得分:0)
使用ListView
向addHeaderView()
添加标题视图时,它会根据您添加的标题视图数偏移列表中所有项目的位置。
在OnItemClickListener
将episodesAdapter.setItemSelected(position)
更改为episodesAdapter.setItemSelected(position - listView.getHeaderViewsCount)
。这将更正偏移并将所选位置正确设置为所选视图。