从另一个onClick方法控件访问ListView控件

时间:2011-07-17 22:34:32

标签: android onclick listactivity

如何从分配给ImageView的onClick方法访问TextView,例如TextView? TextView和ImageView组成了ListView项。

在我的item.xml中,我有:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> 
<ImageView
    android:id="@+id/img"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:onClick="onImgClick"
    />      
<TextView android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
</LinearLayout>

在我的ListActivity中,我有onImgClick方法:

 public void onImgClick(View v) {
    TextView tv = (TextView) v.findViewById(R.id.text);
tv.setText("Hello world!");
} 

但是View v - 这是ImageView,所以在这个方法中我有致命异常:

java.lang.NullPointerException

就行:

tv.setText("Hello world!");

我知道这不是访问TextView的正确方法。而且我知道我可以根据整个ListView使用onListItemClick(ListView l,View v,int position,long id)。但我想通过ImageView onClick方法实现这一目标。

4 个答案:

答案 0 :(得分:5)

我已经解决了我的问题。我只需要在我的LinearLayout上设置id:

android:id="@+id/main_layout"

然后做类似的事情:

public void onImgClick(View v) {
    LinearLayout linearLayout = (LinearLayout) v.getParent();       
    TextView textView = (TextView) linearLayout.findViewById(R.id.text);        
    textView.setText("Hello world!");
}

答案 1 :(得分:0)

嗯,访问TextView的最简单方法是通过Handler并使用sendMessage:

http://developer.android.com/reference/android/os/Handler.html

或者,根据您实现它的方式,您可能需要查看getParent(),如v.getParent().findViewById(r.id.text);

我不确定这是否适合您的情况。

答案 2 :(得分:0)

在onclick侦听器上设置listview的getView方法中的listview。

答案 3 :(得分:0)

我建议您覆盖ListAdapter,并在getView()中将侦听器设置为父视图。使用setTag()可以更轻松地识别身份。

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

...

getView (int position, View convertView, ViewGroup parent){
 LinearLayout thisview = null;
 if(convertView == null){
  convertView = inflater.inflate(R.layout.item, parent);
 }

 TextView tv = convertView.findViewById(R.id.text);

 ImageView img = convertView.findViewById(R.id.img);
 img.setTag("uniqueid_"+position);

 //this will put a reference to the TextView in the ImageView
 img.setKey("TEXT_VIEW", tv);

 img.setOnClickListener(this);
 ...
 return convertView;
}

然后你可以在onClick()中使用v.getKey(“TEXT_VIEW”)获取TextView,但它似乎是一个很好的内存泄漏的可能性。