1

我有一个列表片段显示我的自定义列表项,其中包含包含图像和文本等的相对布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@color/main_background"
    android:paddingLeft="20dp"
    android:paddingTop="10dp"
    android:paddingRight="20dp"
    android:paddingBottom="10dp"
    android:descendantFocusability="blocksDescendants" >  
    <ImageView
        android:id="@+id/source_image"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@color/black"
        android:layout_alignParentLeft="true"
        android:contentDescription="@string/info" />
   <TextView
       android:id="@+id/item_description"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content" 
       android:background="@color/white"
       android:textStyle="bold"
       android:layout_toRightOf="@+id/source_image"
       android:textColor="@color/black"
       android:paddingRight="5dp"
       android:paddingTop="5dp"
       android:paddingBottom="5dp"
       android:paddingLeft="5dp"
       android:textAlignment="center"
       android:text="@string/item_desc" />

       <ImageView
        android:id="@+id/arrow_image"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginRight="30dp"
        android:layout_alignParentRight="true"
        android:contentDescription="@string/info"
        android:src="@drawable/arrow_right" />

   <HorizontalScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="none"
        android:layout_centerInParent="true"
        android:background="@color/main_background"
        android:layout_below="@+id/item_description"> 
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:layout_gravity="fill_horizontal"
            android:layout_marginRight="20dp"
            android:padding="5dp"
            android:orientation="horizontal" >
            <ImageView
                android:id="@+id/item_image"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/info"
                android:src="@drawable/chameleon" />
            <ImageView
                android:id="@+id/item_image2"
                android:paddingLeft="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/info"
                android:gravity="center"
                android:src="@drawable/chameleon" />
            <ImageView
                android:id="@+id/item_image3"
                android:paddingLeft="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/info"
                android:gravity="center"
                android:src="@drawable/chameleon" />
        </LinearLayout>
   </HorizontalScrollView>

</RelativeLayout>

我正在尝试设置一个 OnItemClickListener,因此当用户单击列表项上的任意位置时,就会启动一个新的 Intent。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    //Populate list view with array objects
    adapter = new HomeListItemAdapter(items, getActivity());
    listView = getListView();
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new OnItemClickListener() {
           @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                Toast toast = Toast.makeText(listView.getContext(), "CLICKED", Toast.LENGTH_SHORT);
                toast.show();

            }
    });
}

我正在尝试如上所示,但似乎无法让 OnItemClickListener 工作(目前仅使用 Toast 而不是 Intent 进行测试)。我哪里错了?谢谢

编辑:添加了自定义列表适配器代码

public class HomeListItemAdapter extends BaseAdapter {

    private List<HomeListItem> items;
    private Context context;
    private int numItems = 0;

    public HomeListItemAdapter(final List<HomeListItem> items, Context context) {
        this.items = items;
        this.context = context;
        this.numItems = items.size();
    }

    public int getCount() {
        return numItems;
    }

    public HomeListItem getItem(int position) {
        return items.get(position);
    }

    public long getItemId(int position) {
        return 0;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        // Get the current list item
        final HomeListItem item = items.get(position);
        // Get the layout for the list item
        final RelativeLayout itemLayout = (RelativeLayout) LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
        // Set the the item picture(s)
        ImageView itemImage = (ImageView) itemLayout.findViewById(R.id.item_image);
        itemImage.setImageDrawable(item.getItemPic());
        //Set the profile picture / source picture
        ImageView sourceImage = (ImageView) itemLayout.findViewById(R.id.source_image);
        sourceImage.setImageDrawable(item.getSourcePic());


        // Set the text label as defined in our list item
        TextView itemDesc = (TextView) itemLayout.findViewById(R.id.item_description);
        AssetManager am = context.getAssets();
        Typeface font = Typeface.createFromAsset(am, "Raleway-Thin.ttf");  
        itemDesc.setTypeface(font); 
        itemDesc.setText(item.getText());

        return itemLayout;
    }

}
4

4 回答 4

1

尝试扩展 ListFragment(而不仅仅是普通的 Fragment)。然后你可以覆盖onListItemClicked

    public void onListItemClick(ListView l, View v, int pos, long id)

这为您提供了列表、视图、位置和 ID,因此您应该能够做任何您需要的事情。

于 2013-08-01T14:27:00.337 回答
1

您能否尝试将 HozizontalScrollView 设置为不使用 XML 属性获得焦点

android:focusable="false"
于 2013-08-01T14:39:48.997 回答
0

如果行内有一个 TextView,那么当单击该行时,它将成为焦点。这意味着不会调用 onListItemClick。您要么需要在 TextView 上有一个 OnClickListener,要么从 TextView 中移除焦点。

请参阅未调用 ListFragment OnListItemClick

于 2013-08-01T14:39:17.293 回答
0

试试这个用于服装 ListFragment 的示例项目。这是一个非常好的示例,其中的服装 ListFragment 显示了手机和平板电脑的 2 种类型的视图。 http://s000.tinyupload.com/index.php?file_id=09444774931653041243

Courtsey http://jcrazyandroider.blogspot.in/2015/01/download-links.html

于 2015-01-16T08:10:18.140 回答