有没有办法遍历 ListView 的所有子视图并将它们投射到 TextView

Is there a way to iterate through all Child Views of ListView and cast them to TextView

我正在构建一个用于浏览文件的应用程序,并且正在使用 android 用于数据填充的本机资源布局,称为 android.R.simple_list_item_1,我已经尝试通过列表视图的方法来查看是否可以添加我列表中每个项目左侧的可绘制对象,但没有管理。所以我从列表视图访问视图的唯一方法是在事件 OnItemClick 中,点击的视图作为 parameter 传递给方法然后我可以用这种方式为 drawable[=16 格式化它=]

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,null);
            }
      }
}

我可以在其中获取列表视图中的所有视图,通过所有视图创建 loopiterate 并转换为 TextView 数组,然后将我的可绘制对象设置为 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, null);

        return convertView;
    }
}

然后从你的Activity/Fragment:

private void setItemsToListView(@NonNull final List<YourItemClass> items) {
    mListView.setAdapter(new CustomArrayAdapter(getActivity(), items));
}

此代码将为 ListView 中显示的每一行 运行 "setCompoundDrawables()"。