0

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

4

2 回答 2

3

代替写作OnClickListener(),你OnItemClickListener()为你的listview写作。例如 :

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   

      }
});
于 2013-10-26T10:16:00.767 回答
0

您必须将一个添加AdapterView.OnItemClickListener到您的 ListView。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

有关更多信息,我建议阅读

于 2013-10-26T12:35:08.770 回答