我的ListView有一个OnClickListener。
我想在onClickListener中做这些事情:
1-为整行定义onClickListener而不是行内的文本框
2-当一行点击时,我想知道哪一行被点击了?
这是我在文本框上处理onClickListener所做的工作:
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
String item = ((TextView)v).getText().toString();
Toast.makeText(context, "SHIT Happened", Toast.LENGTH_SHORT).show();
}
};
这是我的getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.news_row, parent,false);
TextView title = (TextView) row.findViewById(R.id.txtTitle);
TextView date = (TextView) row.findViewById(R.id.txtDate);
News temp = list.get(position);
title.setText(temp.getTitle());
date.setText(temp.getsDate());
title.setOnClickListener(onClickListener);
return row;
}
这是布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/newsRow"
android:orientation="horizontal" >
<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="210dp"/>
<TextView
android:id="@+id/txtDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="100dp"/>
<TextView
android:id="@+id/txtNewsID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:width="100dp"/>
</LinearLayout>
</RelativeLayout>
我想我应该为LinearLayout创建一个onClickListener,但是当我这样做时,我现在没有如何访问文本框值。
答案 0 :(得分:3)
您可以为列表视图撰写OnClickListener()
,而不是撰写OnItemClickListener()
。例如:
listView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View view, int pos,
long arg3) {
Log.v("position--", ""+pos);
//Here pos is the position of row clicked
}
});
答案 1 :(得分:0)
您必须向ListView添加AdapterView.OnItemClickListener
。
listView.setOnItemClickListener(YourOnItemClickListener);
然后在listview xml属性中,设置这些属性 -
android:clickable="true"
android:focusable="false"
您的R.layout.news_row
-
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:descendantFocusability="blocksDescendants"
>
//other views
</RelativeLayout>
这些属性会将发生在列表视图行中的事件传递给R.layout.news_row
内的所有子视图。
有关详细信息,建议您阅读this。