我正在尝试从自定义ListView访问ImageView元素以更改其背景颜色。访问和使用TextView是没有问题的。但是真的不知道如何使用ImageView。感谢任何帮助。
btw显示列表没有任何问题。所以适配器一切正常。
list_layout.xml
<ImageView
android:id="@+id/friendIcon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:background="#0d8fe1"
android:src="@drawable/transparent_background_96x96" />
<TextView
android:id="@+id/friendName"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:gravity="center"
android:text="test"
android:textSize="20sp" />
</LinearLayout>
activ_layout.xml(在这种情况下是否重要?)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_marginTop="?attr/actionBarSize"
tools:context=".activities.FriendsActivity">
<!-- Here we are defining ListView in our XML file-->
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/list"/>
</RelativeLayout>
</RelativeLayout>
活动代码
//Declaring Array adapter
ArrayAdapter<String> countryAdapter = new ArrayAdapter<String>(FriendsActivity.this,R.layout.friends_list_layout, R.id.friendName, FriendsActivity.arr);
//Setting the android ListView's adapter to the newly created adapter
mListView.setAdapter(countryAdapter);
for(int i=0; i < mListView.getCount(); i++){
//obviously wrong code. No idea how to iterate through the ListView and getting the backround color to change it
ImageView iview = (ImageView) mListView.findViewById(R.id.friendIcon);
iview.setBackgroundColor(Color.RED);
}
答案 0 :(得分:0)
AFAIK,您所做的只是从字符串数组向ListView添加内容。
我相信能够访问每个imageview的唯一方法是创建自定义适配器(甚至使用带有自定义ViewHolder的RecyclerView)并实现getter方法或监听器。
答案 1 :(得分:0)
为此,您需要编写自己的适配器,而不是使用ArrayAdapter
。
这是一个很好的教程,解释如何实现一个。 http://www.ezzylearning.com/tutorial/customizing-android-listview-items-with-custom-arrayadapter。
WeatherAdapter.java
是自定义适配器,在类中,public View getView(int position, View convertView, ViewGroup parent)
方法是每个listview项膨胀的地方。 (它被称为列表视图的每一行,如循环)
您可以访问该行的每一行的imageview和textview,并使用您喜欢的颜色对其进行充气。 `position是它正在膨胀的行的行号。