布局的动态 id 的 setVisibility true
Posted
技术标签:
【中文标题】布局的动态 id 的 setVisibility true【英文标题】:setVisibility true of dynamic id of a layout 【发布时间】:2017-01-28 07:09:52 【问题描述】:我创建了ListView
,其中每个按钮 id 都包含 database_idx10+button_number
例如,我将 id 设置为 101 即 10=database_id & 1=button_number
现在我要 setVisibility
of id 101
到 View.GONE
这是我生成的唯一 id。
如何使用这个生成的 id 来设置可见性。
我通过调用用户定义函数“click”来检索这个 id,并且在 xml 中我设置了android:onClick="click"
public void click(View view)
final int position = view.getId();
int button_number = position % 10;
int id = position/10;
int layout_id=id*10+2;
if(button_number==1)
//have to set visibity true of layout_id
注意
我能够将可见性从可见设置为消失按钮,但不能设置 对面。
【问题讨论】:
考虑到你在getView方法中设置了onClickListener,你还应该在"if"后面写else条件,这样会使视图不可见,因为视图被回收并保留了之前的属性。 @SarthakMittalandroid:onClick="click"
在 xml 中不在 getView 方法中
好的,但这是一个列表项,对吧?如果是,那么还要加上else语句
这只是与我的问题相关的代码的一部分,但请记住
为什么有必要为列表中的每个列表项中的每个按钮设置唯一的 ID?
【参考方案1】:
如果此按钮是您的视图对象的子项,您可以执行类似的操作
Button btn = (Button) view.findViewById(your_id);
btn.setVisibility(View.VISIBLE);
如果不是,您必须在他的父布局或活动中找到此视图。
【讨论】:
尝试在空对象引用上调用虚拟方法“void android.view.View.setVisibility(int)” 使用代码`View btn = view.findViewById(layout_id); btn.setVisibility(View.VISIBLE);` 解释你的视图结构。您在 ListView 中有按钮,并且您想在按钮单击右后更改另一个视图可见性?这另一个视图是 ListView 子 od 这是活动或片段中的单独视图? 问题最初是我设置了android:visibility="gone"
所以按钮或布局不存在于你所说的DOM中
dom/body @ReazMurshed 中没有问题对象【参考方案2】:
这不是所提问题的解决方案,但无论如何,在列表项中唯一标识一个按钮很容易。实际上,您不必自己设置唯一 ID。列表中每个按钮的 View
引用已经不同。您只需在您的getView
方法中使用position
来识别它们。
这是您列表中适配器的示例getView
方法。
public View getView (int position, View convertView, ViewGroup parent)
if( convertView == null )
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
// Here we can do changes to the convertView
Button b = convertView.findViewById(R.id.button);
// Set your visibility here
if(your_condition_is_true) b.setVisibility(View.VISIBLE);
else b.setVisibility(View.GONE);
return convertView;
【讨论】:
view.setVisibility(View.VISIBLE);
您如何定位特定的 id 或按钮?
getView
将在我单击列表中的任何内容时被调用?
在点击事件创建列表时我不必这样做
getView
绑定您的每个列表项。 onClick
将在每个列表项上设置为 convertView.findViewById(R.id.your_button).setOnClickListener(...)
。【参考方案3】:
尝试这样做 view.setVisibility(View.VISIBLE);
【讨论】:
我将在哪里设置这个? public void click(View view) final int position = view.getId(); int button_number = 位置 % 10; int id = 位置/10; int layout_id=id*10+2; if(button_number==1) view.setVisibility(View.VISIBLE); 【参考方案4】:您需要Details
类中的boolean
变量来保持详细信息部分的可见性。
您的适配器代码应该是,
class MyAdapter extends BaseAdapter
ArrayList<Details> list;
Context context;
public MyAdapter(Context context, RealmResults<Details> result2)
this.context = context;
this.list = result2;
public class Holder
TextView topic;
TextView detail;
LinearLayout details;
ImageButton send;
ImageButton edit;
ImageButton delete;
public Holder(View v)
this.topic= (TextView) v.findViewById(R.id.TextView1);
this.detail= (TextView) v.findViewById(R.id.td);
this.details = (LinearLayout) v.findViewById(R.id.details);
this.send= (ImageButton) v.findViewById(R.id.imagebutton1);
this.edit= (ImageButton) v.findViewById(R.id.imagebutton3);
this.delete= (ImageButton) v.findViewById(R.id.imagebutton2);
@Override
public View getView(int i, View view, ViewGroup viewGroup)
View row=view;
Holder holder=null;
if(row == null)
LayoutInflater inflater= (LayoutInflater) context.getSystemService(MainActivity.context.LAYOUT_INFLATER_SERVICE);
row= inflater.inflate(R.layout.layout,viewGroup,false);
holder = new Holder(row);
row.setTag(holder);
else
holder= (Holder) row.getTag();
final Details temp = (Details) getItem(i);
holder.topic.setText(temp.getTopic());
holder.detail.setText(temp.getTopic_details());
if(temp.isDetailButtonVisible())
holder.details.setVisiblity(View.VISIBLE);
else
holder.details.setVisiblity(View.GONE);
holder.topic.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
temp.setDetailButtonVisibility(false);
);
holder.send.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
);
holder.detail.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
);
holder.edit.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
);
holder.delete.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
);
return row;
你的布局应该是,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:layout_
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp">
<LinearLayout
android:layout_
android:layout_
android:weightSum="6"
android:orientation="horizontal"
android:background="#5894CA"
android:clickable="true">
<TextView
android:layout_
android:layout_
android:layout_weight="4"
android:id="@+id/TextView1"
android:text="Bank of baroda details...."
android:layout_marginStart="10dp"
android:textStyle="bold"
android:fontFamily="sans-serif-condensed"
android:layout_marginTop="10px"
android:textSize="20dp" />
<LinearLayout
android:layout_
android:layout_
android:layout_weight="2"
android:orientation="horizontal">
<ImageButton
android:layout_
android:layout_
android:id="@+id/imagebutton1"
android:background="@drawable/share" />
<ImageButton
android:layout_
android:layout_
android:id="@+id/imagebutton3"
android:layout_marginStart="10dp"
android:background="@drawable/edit_text" />
<ImageButton
android:layout_
android:layout_
android:id="@+id/imagebutton2"
android:layout_marginStart="10dp"
android:background="@drawable/gnome_edit_delete" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
android:clickable="true"
android:id="@+id/details"
android:visibility="invisible" >
<TextView
android:layout_
android:layout_
android:background="@drawable/bg"
android:text="I have a LinearLayout that I've styled to look like a button, and it contains a few text/ImageView elements. I would like to make the whole LinearLayout act like a button, in particular to give it states that are defined in a so it has a different background when it is pressed..."
android:layout_margin="10dp"
android:id="@+id/td" />
</LinearLayout>
</LinearLayout>
【讨论】:
isDetailButtonVisible 方法? 阅读我回答的第一行。isDetailButtonVisible
是该变量的包装器。
temp.setDetailButtonVisibility(false); temp 不能被内部类访问
list.setAdapter(context,new MyAdapter(result2));关于 Mainactivity 给出错误我不知道为什么
试试list.setAdapter(new MyAdapter(context, result2));
以上是关于布局的动态 id 的 setVisibility true的主要内容,如果未能解决你的问题,请参考以下文章
ListView中动态显示隐藏HeaderView和FooterView
ListView: setvisibility() 强制刷新所有行
Android:为什么setVisibility(View.GONE);或setVisibility(View.INVISIBLE);不工作