Android 设置可见性不工作
这是我的布局:Android 设置可见性不工作,android,android-layout,visibility,Android,Android Layout,Visibility,这是我的布局: 这是我的自定义视图 import java.util.Calendar; 公共类DayView扩展了LinearLayout{ 私人最终布尔值不到一个月; 私人最终文本视图编号视图; 私用内线长度m=0; 私人最终影像视图iv1、iv2、iv3、iv4、iv5、iv6、iv7、iv8、iv9、iv10、, iv11、iv12、iv13、iv14、iv15、iv16、iv17、iv18; 公共日视图(最终上下文、最终日历移动、, 最终日历(日历){ 超级(上下文); 查看。充气
这是我的自定义视图
import java.util.Calendar;
公共类DayView扩展了LinearLayout{
私人最终布尔值不到一个月;
私人最终文本视图编号视图;
私用内线长度m=0;
私人最终影像视图iv1、iv2、iv3、iv4、iv5、iv6、iv7、iv8、iv9、iv10、,
iv11、iv12、iv13、iv14、iv15、iv16、iv17、iv18;
公共日视图(最终上下文、最终日历移动、,
最终日历(日历){
超级(上下文);
查看。充气(上下文、右布局、日历、周、日、此);
iv1=(ImageView)findViewById(R.id.imageView1);
iv2=(ImageView)findViewById(R.id.imageView2);
iv3=(ImageView)findViewById(R.id.imageView3);
iv4=(ImageView)findViewById(R.id.imageView4);
iv5=(ImageView)findViewById(R.id.imageView5);
iv6=(ImageView)findViewById(R.id.imageView6);
iv7=(ImageView)findViewById(R.id.imageView7);
iv8=(ImageView)findViewById(R.id.imageView8);
iv9=(ImageView)findViewById(R.id.imageView9);
iv10=(ImageView)findViewById(R.id.imageView10);
iv11=(ImageView)findViewById(R.id.imageView11);
iv12=(ImageView)findViewById(R.id.imageView12);
iv13=(ImageView)findViewById(R.id.imageView13);
iv14=(ImageView)findViewById(R.id.imageView14);
iv15=(ImageView)findViewById(R.id.imageView15);
iv16=(ImageView)findViewById(R.id.imageView16);
iv17=(ImageView)findViewById(R.id.imageView17);
iv18=(ImageView)findViewById(R.id.imageView18);
最终图像视图[]视图=新图像视图[]{iv1,iv2,iv3,iv4,iv5,
iv6,iv7,iv8,iv9,iv10,iv11,iv12,iv13,iv14,iv15,iv16,
iv17,iv18};
用于(最终图像视图v:视图){
v、 设置可见性(视图不可见);
}
numberView=(TextView)findViewById(R.id.day\U编号);
numberView.setText(Integer.toString(moving.get(Calendar.DAY/u/u MONTH));
setTag(moving.clone());
belongsToMonth=(moving.get(Calendar.MONTH)=Calendar.current
.get(日历.月));
最终资源res=getResources();
如果(!少于一个月){
numberView.setTextColor(分辨率
.getColor(R.color.calendar\u unbelong\u dayview\u text));
挫折资源(R.drawable.Unbelong_dayview);
}否则{
numberView.setTextColor(分辨率
.getColor(R.color.calendar\u所属\u dayview\u文本);
setBackgroundResource((DateParseUtils.areEqualDays)(移动,
日历。今天)-R.drawable.selected_dayview
:R.可绘制。未选择(日视);
}
}
测量时的保护空隙(最终内部宽度测量),
公共布尔值belongsToMonth(){
公共日历getCalendar(){
公共void addRace(最终解析对象carrera){
最终图像视图[]视图=新图像视图[]{iv1,iv2,iv3,iv4,iv5,
iv6,iv7,iv8,iv9,iv10,iv11,iv12,iv13,iv14,iv15,iv16,
iv17,iv18};
if(沟道长度<视图长度){
最终图像视图iv=视图[racesNum];
最终内部id=getRaceId(carrera);
iv.setImageDrawable(getContext().getResources().getDrawable(id));
对于(int i=0;i 如果(i您试图从后台设置ImageView
的可见性Async thread
。
您不能直接从后台线程访问视图
您可以使用处理程序
,并在下一个方法中更新视图的可见性
public void handleMessage(Message msg) {
super.handleMessage(msg);
// update views here
}
或者,您可以直接在代码中使用下一个示例代码:
imageView.post(new Runnable() {
@Override
public void run() {
imageView.setVisibility(View.VISIBLE));
}
});
好的,解决了
我的DayView
是在ArrayAdapter
上动态创建的。我所要做的就是在ArrayAdapter
的getView
方法中执行所有视图操作,然后调用adapter.notifyDataSetChanged()
,而不是试图直接修改它们
此外,我必须使用ViewHolder模式才能正确地进行修改。在以下情况下,最后一种方法总是对我有效
.setVisibility(VISIBLE/INVISIBLE/GONE) ;
未能将我的布局添加到或从附加到的视图组中删除。将其发布到视图线程,它将完成以下工作:
m_viewIsVisible=/false/true; //set before hand
public void run()
{
try
{
if (!m_viewIsVisible)
RootView.rootGroop().removeView(currentLayout);
else
RootView.rootGroop().addView(currentLayout);
} catch (Exception ex)
{
Log.e(TAG, "-Add/Remove layout throws exception:: " + ex.toString());
}
}
这里currentLayout是您想要显示/隐藏的顽固布局。RootView.rootGroop()获取currentLayout所属的视图组。
您应该应用自己的逻辑来保存和获取对父视图组的引用。在设置可见性获取调用时,您在后台遇到任何问题吗?没有。我只是在后台调用服务器,然后在响应时设置视图的可见性。调用完成得很好,唯一令人尴尬的是视图没有更改其可见性不,我在AsyncTask的onPostExecute方法中从主线程执行,调试器实际上说我在主线程上。我在主线程上,测试完成后我会发布结果;-)下班后需要在我的计算机上找时间测试代码