HListView中的项目不能使用Horizo​​ntalListView进行单击

时间:2013-10-12 16:25:03

标签: android horizontallist

我需要的是一个水平滚动ListView,用作可水平滚动的菜单。

我搜索了一个解决方案并想出了this library

我正在尝试在it.sephiroth.android.library.widget.AdapterView.OnItemClickListener的{​​{1}}对象上实施it.sephiroth.android.library.widget.HListView

我可以将列表填充,但我似乎无法将侦听器附加到该项目。 我已经尝试了2天来解决这个问题,但没有比赛。此功能仍无法使用。所以我转向旧WWW寻求救赎。

这是我的DialogFragment XML fragment_layout.xml

DialogFragment

这是我的viewitem.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#800000"
    android:descendantFocusability="blocksDescendants" >

   <it.sephiroth.android.library.widget.HListView
            android:id="@+id/hlvPlacesListScrollMenu"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:background="@android:color/transparent"
            android:scrollbars="none"
            android:divider="@android:color/transparent"
             />

这是我的main_activity_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#800000"
    android:clickable="false"
    android:focusable="false"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/ibScrollMenuImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#800000"
        android:clickable="false"
        android:focusable="false"
        android:scaleType="centerCrop" />

    <TextView
        android:id="@+id/tvScrollMenuTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:focusable="false"
        android:gravity="center_horizontal"
        android:textColor="#f4f4f4" />

</LinearLayout>

非常基本。

My MainActicity是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/llDialogFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#34f34f"
    android:orientation="vertical"
    tools:context=".MainActivity" >

</LinearLayout>

Dialogfrgment .java:

package com.example.hscrollviewtest;



import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        LifeStatsDialogFragment menuFragment = new LifeStatsDialogFragment();
        ft.add(R.id.llDialogFragment, menuFragment).commit();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

这是适配器(当我在Horizo​​ntalVariableListViewDemo中使用它时可以工作):

package com.example.hscrollviewtest;

import it.sephiroth.android.library.widget.AdapterView;
import it.sephiroth.android.library.widget.AdapterView.OnItemClickListener;
import it.sephiroth.android.library.widget.HListView;

import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class LifeStatsDialogFragment extends DialogFragment implements
        OnItemClickListener {

    private HListView scroll;
    private View rootView;
    private HorizontalScrollMenuAdapter mAdapter;
    final String[] IMAGE_TITLE = new String[] { "Home", "Work", "School",
            "Sport" };
    final int[] MENU_IMAGES = new int[] { R.drawable.ic_circle_home,
            R.drawable.ic_circle_work, R.drawable.ic_circle_school,
            R.drawable.ic_circle_gym };

    public LifeStatsDialogFragment newInstance() {
        return new LifeStatsDialogFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        rootView = inflater.inflate(R.layout.fragment_layout, container, false);
        mAdapter = new HorizontalScrollMenuAdapter(getActivity(),
                R.layout.fragment_layout, R.id.tvScrollMenuTitle, IMAGE_TITLE,
                MENU_IMAGES);
        scroll = (HListView) rootView
                .findViewById(R.id.hlvPlacesListScrollMenu);
        scroll.setAdapter(mAdapter);
        scroll.invalidate();
        scroll.setOnItemClickListener(this);

        for (int i = 0; i < scroll.getAdapter().getCount(); i++) {
            Log.i(this.getClass().getSimpleName(), "first item in scroll : "
                    + scroll.getChildAt(i) + "and its clickable?? "
                    + scroll.getAdapter().getItemViewType(i) + "\n");
        }

        Log.i(this.getClass().getSimpleName(),
                "The number of children for HlistView is: "
                        + scroll.getParent().toString());

        return rootView;

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // TODO Auto-generated method stub

    }

}

我希望你们中的一个能看到我的盲点。 Thaks

2 个答案:

答案 0 :(得分:1)

可能你正在实现错误的OnItemClickListener。 尝试使用

public class LifeStatsDialogFragment extends DialogFragment implements
        it.sephiroth.android.library.widget.AdapterView.OnItemClickListener {
//...
}

答案 1 :(得分:0)

我会尝试两件事:

  1. 首先将片段放在xml布局中,并避免添加onCreate。
  2. onItemClick会发生什么? - 它目前是空的。尝试使用独立的onItemClickListener:

    list.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(getActivity(), "clicked", Toast.LENGTH_SHORT);
        }
    });