访问onClickListener中listView行中的项目

时间:2013-10-26 09:56:17

标签: android listview onclick

我的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,但是当我这样做时,我现在没有如何访问文本框值。

2 个答案:

答案 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