我有一个自定义的布局,如图所示。
激活是通过SMS完成的。因此,一旦SMS激活开始,“尚未激活,文本”就会消失,绿色箭头与灰色箭头切换。我的布局xml文件如下所示。我有两个图像视图"@+id/list_arrow"
和"@+id/green_list_arrow"
。
在SMSReceiver
中,我用
lvObjects = (ListView)myView.findViewById(android.R.id.list);
lvObjects.post(new Runnable() { public void run() { MyListFragment.adapter.notifyDataSetChanged(); } } );
在自定义ListView的
getView()
中,我进行了更新,就好像我使用@+id/list_arrow
是“已激活”,而我使用@+id/green_list_arrow
是“未激活”一样。经过测试后,“未激活的文本”会消失,但是绿色箭头永远不会更新。可能缺少什么?谢谢
Edit1:一旦激活,我也想停止
setOnClickListener()
。我怎样才能做到这一点?public View getView(int position, View convertView, ViewGroup parent) {
BitmapWorkerTask task = null;
View vi=convertView;
ViewHolder viewHolder=new ViewHolder();
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(vi==null){
vi = inflater.inflate(R.layout.list_row, parent, false);
viewHolder.id=(TextView)vi.findViewById(R.id.title);
viewHolder.thumbnailImage=(ImageView)vi.findViewById(R.id.list_image);
viewHolder.activationStatus = (TextView)vi.findViewById(R.id.activated);
if(position > maxRowNumber)
maxRowNumber = position;
vi.setTag(viewHolder);
}else{
viewHolder=(ViewHolder)vi.getTag();
}
viewHolder.thumbnailImage.setOnClickListener(new onMyClick(position));
viewHolder.id.setText(listIDs.get(position));
if(activationState.get(position).equals("Activated")) {
viewHolder.arrow=(ImageView)vi.findViewById(R.id.list_arrow);
viewHolder.activationStatus.setText("");
}
else{
viewHolder.arrow=(ImageView)vi.findViewById(R.id.green_list_arrow);
viewHolder.activationStatus.setText(activationState.get(position));
viewHolder.activationStatus.setTextColor(android.graphics.Color.GRAY);
viewHolder.arrow.setOnClickListener(new onMyArrowClick(position));
}
String hasnoimageyet = "no";
if(position > maxRowNumber && maxRowNumber > 3 ){//it is for sure
hasnoimageyet = this.listRowhasnoImageyet.get(position);
}
String id = listIDs.get(position);
task.execute(id);
}
return vi;
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_background_selector"
android:orientation="horizontal"
android:padding="5dip" >
<!-- ListRow Left sied Thumbnail image -->
<LinearLayout android:id="@+id/thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dip"
android:layout_alignParentLeft="true"
android:background="@drawable/image_bg"
android:layout_marginRight="5dip">
<ImageView
android:id="@+id/list_image"
android:layout_width="50dip"
android:focusable="false"
android:clickable="true"
android:onClick="imageViewisClicked"
android:contentDescription="@string/image_view_description"
android:layout_height="50dip"
android:src="@drawable/icons_preview"
/>
</LinearLayout>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/thumbnail"
android:textColor="#040404"
android:typeface="sans"
android:textSize="15sp"
android:textStyle="bold"/>
<!-- Rightend Arrow -->
<ImageView
android:id="@+id/list_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/arrow"
android:layout_alignParentRight="true"
android:src="@drawable/arrow"
android:layout_centerVertical="true"/>
<ImageView
android:id="@+id/green_list_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:contentDescription="@string/arrow"
android:layout_alignParentRight="true"
android:src="@drawable/green_arrow"
android:layout_centerVertical="true"/>
<TextView
android:id="@+id/activated"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/title"
android:paddingLeft="20dp"
android:typeface="sans"
android:textStyle="italic"
android:textSize="15sp"/>
</RelativeLayout>
最佳答案
使用您的布局,无论如何,您都在绿色箭头上方绘制绿色箭头。 (因为它在xml中另一个的下面)
您可以根据状态切换两者的可见性,也可以只为箭头设置一个ImageView并更改位图。 (下面的代码)
可以通过将OnClickListener设置为null
来禁用它。
if(activationState.get(position).equals("Activated")) {
viewHolder.arrow=(ImageView)vi.findViewById(R.id.list_arrow);
viewHolder.arrow.setImageResource(R.drawable.arrow);
viewHolder.activationStatus.setText("");
viewHolder.thumbnailImage.setOnClickListener(null);
} else{
viewHolder.arrow=(ImageView)vi.findViewById(R.id.green_list);
viewHolder.arrow.setImageResource(R.drawable.green_arrow);
viewHolder.activationStatus.setText(activationState.get(position));
viewHolder.activationStatus.setTextColor(android.graphics.Color.GRAY);
viewHolder.arrow.setOnClickListener(new onMyArrowClick(position));
viewHolder.thumbnailImage.setOnClickListener(new onMyClick(position));
}
甚至更平滑的解决方案是在图像视图上使用StateListDrawable甚至更好的彩色滤光片。
关于android - 如何动态切换两个布局组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18425409/