Android - 如何使用适配器类中的代码在布局文件中设置图像?
Posted
技术标签:
【中文标题】Android - 如何使用适配器类中的代码在布局文件中设置图像?【英文标题】:Android - How can I set an Image in a layout file with code from an adapter class? 【发布时间】:2015-02-12 07:24:46 【问题描述】:我正在开发一个遵循此 youtube 链接上的教程的 android 项目: https://www.youtube.com/watch?v=YCHNAi9kJI4 . 这是一个动画 listView 删除。
我在 opaque_text_view.xml 文件的一部分中有一个图像设置:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/image_text_vew_list"
android:layout_
android:layout_
android:background="@drawable/tv_background_with_divider"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:drawableLeft="@drawable/ic_launcher" <--------------------------
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>
这很完美,但是,我想动态更改图像,以便使用类似 gmail 的图标进行调整,这些图标反映了邮件本身的字母和颜色。我已经有了将图像设置为看起来像我在这里获得的 Gmail 客户端的代码:Colored boxed with letters a la Gmail。
我遇到的问题是调整 opaque_text_view.xml 的代码只能在适配器中找到:
public class ListViewRemovalAnimation extends Activity
StableArrayAdapter mAdapter;
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_deletion);
mBackgroundContainer = (BackgroundContainer) findViewById(R.id.listViewBackground);
//Set the adapter here
--> mAdapter = new StableArrayAdapter(this,R.layout.opaque_text_view, list, mTouchListener);** <--
mListView.setAdapter(mAdapter);
StableArrayAdapter 是它自己的类,定义如下:
public class StableArrayAdapter extends ArrayAdapter<String>
...
我基本上必须从那个 StableArrayAdapter 中编辑图片,但由于它没有扩展到活动,所以我找不到方法来做到这一点。我尝试使用此How to programmatically set drawableLeft on Android button? 链接中的代码,但同样的问题。
换一种说法,如何更改 opaque_text_view (drawableleft) 中的图像以将其更新为:
final LetterTileProvider tileProvider = new LetterTileProvider(this);
final Bitmap letterTile = tileProvider.getLetterTile("name", "key", tileSize, tileSize);
//SET BITMAP IMAGE HERE!!!
没有活动的好处。 有人有什么建议吗?
【问题讨论】:
我不清楚具体问题是什么。您是在问如何在 Adapter 中实例化 LetterTileProvider 吗?或者如何在 TextView 上设置 Drawable?还是别的什么? 向迈克道歉!基本上,我如何在文本视图中设置可绘制对象。我能够实例化 LetterTileProvider,我只是不知道如何将它传递给文本视图上的绘图。 【参考方案1】:我不确定我是否理解,因为提供的代码不多。完整的 Activity 代码、ArrayAdapter 代码和项目类别的代码会有所帮助。
在活动 onCreate 你想要这样的东西:
yourListView.setAdapter(yourAdapter);
yourListView.setOnItemClickListener(new OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id)
YourItemClass itemClicked = view.yourGetData();
yourAdapter.changeIcon(itemClicked);
);
在 ArrayAdapter 中你想创建一个函数,比如:
public void changeIcon(YourItemClass item)
YourItemClass.setClicked(true);
notifyDataSetChanged();
还在你的 ArrayAdapter 中的 getView(int position, View convertView, ViewGroup parent) 中添加:
if (yourArray.get(position).isClicked())
yourTextView.setCompoundDrawables(getContext().getResources().getDrawable( R.drawable.your_clicked_icon), null, null, null);
然后,在您的项目类中,您需要某种方式来存储它是什么类型。例如,在这里编码,您需要一个带有 setClicked() 和 isClicked() 方法的 isClicked 布尔值。
【讨论】:
这正是我找到正确答案所需要的,感谢您花时间回答!以上是关于Android - 如何使用适配器类中的代码在布局文件中设置图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何在android中单击listview适配器时展开和折叠视图
如何使用lambda表达式/缩短onclicklisteners android studio