gpt4 book ai didi

android - ListView 项目的 OnClickListener 行为在更多项目上复制

转载 作者:行者123 更新时间:2023-11-29 23:52:07 24 4
gpt4 key购买 nike

当我有一个简单的 ListView 并且我想通过单击它来更改显示项目字符串的 TextBox 的颜色时,我使用以下代码:

public class ListViewActivity extends Activity {

ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);

ArrayList<String> list=new ArrayList<String>();
for (int i = 0; i < 100; i++) {
list.add(String.valueOf(i));
}

listView=(ListView) findViewById(R.id.listView1);
CustomArrayAdapter adapter=new CustomArrayAdapter(this,R.layout.listview_row,R.id.listviewRow,list);
listView.setAdapter(adapter);

}

class CustomArrayAdapter extends ArrayAdapter<String>{


public CustomArrayAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List<String> objects) {
super(context, resource, textViewResourceId, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=super.getView(position,convertView,parent);

ViewGroup vg=(ViewGroup) view;
TextView txtView=(TextView) vg.getChildAt(0);

if (!txtView.hasOnClickListeners()){
txtView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView t=(TextView) v;
t.setTextColor(0xffbababa);
t.invalidate();
}
});
}

return view;
}
}

和布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="gr.spunitrade.development.spda.ListViewActivity">

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView1">

</ListView>

<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:id="@+id/listviewRow"
/>

</LinearLayout>

当单击项目时,可以通过向下滚动 ListView 看到更多项目在未单击的地方变灰。即使在 listView.setOnItemClickListener 替代实现上执行变灰,也会发生相同的行为。

我不明白为什么会这样。 OnClick 事件上的断点只命中一次。

最佳答案

我会这样处理。

假设您想根据点击切换颜色。

保留一个 bool 值数组,其中包含数据源的大小。

初始化为假。

单击时设置为 true 并设置颜色。然后在创建 View 中根据 bool 值设置颜色。

关于android - ListView 项目的 OnClickListener 行为在更多项目上复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50788063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com