【发布时间】:2021-10-04 22:07:09
【问题描述】:
我在我的 Android 应用程序中为 ListView 设置了 BaseAdapter。每次我单击 ListView 时,单击操作都可以正常工作。但是我点击的元素总是会到 ListView 的顶部。
当我点击 ListView 时,如何让点击的项目保持原位?
这个问题会不会是 BaseAdapter 造成的?
public class TrackAdapter extends BaseAdapter {
private final Context context;
private List<Track> tracks;
public TrackAdapter(List<Track> tracks, Context context) {
this.tracks = tracks;
this.context = context;
}
@Override
public int getCount() {
return tracks.size();
}
@Override
public Object getItem(int position) {
return tracks.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
public void updateAdapter(List<Track> list) {
tracks = list;
this.notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(context).inflate(R.layout.track_list_layout, parent, false);
convertView.setBackgroundResource(R.drawable.listview_background);
TextView name = convertView.findViewById(R.id.track_name);
name.setText(tracks.get(position).getName());
TextView bpm = convertView.findViewById(R.id.track_bpm);
bpm.setText(BPMHelper.Combine(tracks.get(position).getMinBpm(), tracks.get(position).getMaxBpm()));
TextView type = convertView.findViewById(R.id.track_type);
type.setText(tracks.get(position).getType());
TextView size = convertView.findViewById(R.id.track_size);
size.setText(tracks.get(position).getSize());
return convertView;
}
}
和
trackList = (ListView) findViewById(R.id.listView);
trackList.setAdapter(trackAdapter);
trackList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// @SuppressLint("ResourceAsColor")
TextView previousView = null; // to hold the previous clicked view
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView textView = view.findViewById(R.id.track_name);
if (previousView != null) {
// revert the previous view when a new item is clicked
previousView.setTextColor(Color.YELLOW);
}
previousView = textView;
textView.setTextColor(Color.RED);
}
});
我在 CoordinatorLayout 中的 ListView
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="587dp"
android:layout_margin="10dp"
android:divider="@color/grey"
android:dividerHeight="10.0sp"
android:scrollbars="none" />
【问题讨论】:
-
请在您的 onItemClick 函数中添加代码
标签: android listview baseadapter