我正在使用LayoutInflater
对xml进行充气,因为我希望此动态多次(动态)。
我的ònCreate`方法如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
v[i]= new View[4];
LinearLayout linear= (LinearLayout) findViewById(R.id.linearLayout);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for(int i = 1; i <4; i++) {
v[i]= inflater.inflate(R.layout.row, linear); //v[i] returns view i.e. Linear Layout from my row.xml
}
}
我的row.xml代码如下 -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffaf04"
android:orientation="horizontal"
android:padding="10dip" >
<LinearLayout
android:id="@+id/rel1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:background="#ffffff"
android:orientation="vertical"
android:padding="5dp" >
<ImageView
android:id="@+id/imageView1inInflatedRow"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/image_holder" >
</ImageView>
<Button
android:id="@+id/button1inInflatedRow"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:background="@layout/button_selector"
android:padding="5dip"
android:textColor="#FFFFFF"
android:textSize="12sp" >
</Button>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:background="#ffffff"
android:orientation="vertical"
android:padding="5dp" >
<ImageView
android:id="@+id/imageView2inInflatedRow"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/image_holder" >
</ImageView>
<Button
android:id="@+id/button2inInflatedRow"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:background="@layout/button_selector"
android:padding="5dip"
android:textColor="#FFFFFF"
android:textSize="12sp" >
</Button>
</LinearLayout>
</LinearLayout>
现在该行包含按钮,我想为按钮设置一个onclick监听器,即button1inInflatedRow
和button2inInflatedRow
执行相同的功能,但我需要知道哪个按钮调用了该功能。那么,如何为这些按钮调用findVieById()
?或者是否有其他方式来调用按钮onclick
..?
答案 0 :(得分:3)
您不需要onFinishInflate()
。调用inflate()
会返回新创建的视图。只需在视图上使用findViewById()
逐个按钮的ID,并在每个按钮上设置OnClickListener。
答案 1 :(得分:1)
根据我的知识推广一行的最佳方法如下 -
View v[i] = inflater.inflate(R.layout.row, null);
linear.addView(v[i]);
此v返回row.xml中的膨胀视图。因此我们可以访问Button作为
photoButton[i]=(Button) v[i].findViewById(R.id.button1inInflatedRow);
我哪里错了--- 我正在使用
View v[i] = inflater.inflate(R.layout.row, linear);
这个V [i]是父布局,因此我无法通过
访问按钮 (Button) v[i].findViewById(R.id.button1inInflatedRow)
答案 2 :(得分:0)
据我了解,您的布局R.layout.row
包含Buttons
,并且您希望将OnClickListeners
添加到这些Buttons
。您不需要覆盖任何方法来执行此操作。 inflate()
的方法LayoutInflater
会返回您刚刚充气的View
的实例。然后,您可以使用findViewById()
获取布局中的Buttons
。尝试这样的事情:
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.row, linear);
Button buttonOne = (Button) v.findViewById(R.id.buttonOne);
button.setOnClickListener(new View.OnClickListener()...
答案 3 :(得分:0)
准确回答您的问题:
那么,如何以及在何处覆盖此方法?
答案在View或ViewGroup子类中。
但是很明显,您正在询问如何在“行”布局中为按钮应用侦听器,该布局在LinearLayout内“重复”。没有必要覆盖此方法以实现此目的,但有些事情需要清除才能获得更好的答案。例如,“行”布局中的按钮有多少?你是否希望每一行中的每个按钮都做同样的事情(调用相同的功能)或者按钮的功能必须不同,让我们说它们在哪一行?
我会给你一个关于如何做到这一点的一般想法,但它完全基于我的想法,如果你需要一个更好的答案,你应该编辑你的问题,并提供更多的细节,如你的xml文件,你究竟想要的是什么做。
现在代码。
在“row”xml布局中,在Button元素中提供以下属性:
android:onClick="ButtonClickFunction"
然后在你的活动中声明一个这样的函数:
public void ButtonClickFunction(View v) {
<Your code here>
}
现在,只要单击此按钮(在任何行中),就会以按钮作为参数调用ButtonClickFunction。但是,如果您想要基于行号的不同操作,这可能不是最好的方法。
当然,您可以随意更改“ButtonClickFunction”名称。您可以详细了解我的建议here和here.
希望这会有所帮助......