gpt4 book ai didi

android - 如何动态切换两个布局组件

转载 作者:行者123 更新时间:2023-11-30 03:24:45 28 4
gpt4 key购买 nike

我有一个自定义的布局,如图所示。 picture激活是通过短信完成的。因此,一旦 SMS 激活到来,“尚未激活文本”就会消失,并且绿色箭头会与灰色箭头切换。我的布局 xml 文件如下所示。我有两个 ImageView "@+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>

最佳答案

在您的布局中,无论如何,您都在 grez 上面绘制绿色箭头。 (因为它在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或者甚至更好的 ImageView 上的滤色器。

关于android - 如何动态切换两个布局组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425409/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com