如何解决有没有办法遍历 ListView 的所有子视图并将它们转换为 TextView
我正在构建一个用于浏览文件的应用程序,并且正在使用名为 android.R.simple_list_item_1
的数据填充的 android 原生资源布局,我尝试通过列表视图的方法查看是否可以在左侧添加一个可绘制对象我列表中的每个项目但没有管理。因此,我从列表视图访问视图的唯一方法是在事件 OnItemClick
上,其中点击的视图作为 parameter
传递给方法,然后我可以通过这种方式为 drawable 设置格式
public class MainActivity extends AppCompatActivity {
//Define a listview for holding the data mined from storage
public ListView mydata;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Define the listview
mydata=findViewById(R.id.data);
mydata.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
//Cast view to TextView at position
TextView r=(TextView)view;
//get the drawable and set to textview
Drawable mydraw= ResourcesCompat.getDrawable(getResources(),R.drawable.ic_baseline_file_copy_24,null);
r.setCompoundDrawables(mydraw,null,null);
}
}
}
是否可以在其中获取列表视图中的所有视图,通过所有视图创建 loop
,iterate
并转换为 TextView 数组,然后将我的 drawable 设置为 TextView(s) ?
解决方法
final static class YourItemClass {
...
}
final static class ViewHolder {
TextView mTextView;
private ViewHolder(@NonNull final View simpleListItem1) {
if (!(simpleListItem1 instanceof TextView)) throw new IllegalArgumentException("TextView was expected as root of Layout");
this.mTextView = (TextView)simpleListItem1;
}
}
final class CustomArrayAdapter extends ArrayAdapter<YourItemClass> {
private final Drawable mDrawable;
private final LayoutInflater mLayoutInflater;
public CustomArrayAdapter(@NonNull final Context context,@NonNull final List<YourItemClass> objects) {
super(context,resource,objects);
this.mDrawable = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_baseline_file_copy_24,null);
this.mLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@NonNull
@Override
public View getView(final int position,@Nullable View convertView,@NonNull final ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = this.mLayoutInflater.inflate(android.R.layout.simple_list_item_1,parent,false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
final YourItemClass cYourItemClassAtSpecificPosition = this.getItem(position);
holder.mTextView.setCompoundDrawables(this.mDrawable,null,null);
return convertView;
}
}
然后从您的活动/片段:
private void setItemsToListView(@NonNull final List<YourItemClass> items) {
mListView.setAdapter(new CustomArrayAdapter(getActivity(),items));
}
此代码将为 ListView 中显示的每一行运行“setCompoundDrawables()”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。