2

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

我搜索了一个解决方案并想出了这个库

我正在尝试it.sephiroth.android.library.widget.AdapterView.OnItemClickListener在.it.sephiroth.android.library.widget.HListViewDialogFragment

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

这是我的 DialogFragment XML fragment_layout.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"
             />

这是我的 viewitem.xml

<?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>

这是我的 main_activity_layout

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

很基本。

我的主要活动是:

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;
    }

}

Dialogfrgment .java :

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

    }

}

这是适配器(当我在 Horizo​​ntalVariableListViewDemo 中使用它时有效):

package com.example.hscrollviewtest;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;

public class HorizontalScrollMenuAdapter extends ArrayAdapter<String>{

    private String[] mButtonText;
    private int[] mIconId;
    private final String TAG = this.getClass().getSimpleName();
    //Constructor
    public HorizontalScrollMenuAdapter(Context context, int resource,
            int textViewResourceId, String[] menuItemName, int[] menuItemImage) {
        super(context, resource, textViewResourceId, menuItemName);
        // TODO Auto-generated constructor stub
        mButtonText = menuItemName;
        mIconId = menuItemImage;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mIconId.length;
    }

    @Override
    public String getItem(int position) {

        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        LayoutInflater mInflater = (LayoutInflater) parent.getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        ViewHolder holder;

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.viewitem, null);
            holder = new ViewHolder();
            holder.name = (TextView) convertView.findViewById(R.id.tvScrollMenuTitle);
            holder.icon=(ImageButton) convertView.findViewById(R.id.ibScrollMenuImage);
            //holder.icon.setBackgroundResource(android.R.color.transparent);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.name.setText(mButtonText[position]);
        holder.icon.setImageResource(mIconId[position]);
        holder.icon.setTag(mIconId[position]);
        Log.d(TAG,"returned view to fragment");



        return convertView;

    }

    static class ViewHolder{
        TextView name;
        ImageButton icon;
    }


}

我希望你们中的一个人能看到我的盲点。塔克斯

4

2 回答 2

1

可能您正在实施错误的 OnItemClickListener。尝试使用

public class LifeStatsDialogFragment extends DialogFragment implements
        it.sephiroth.android.library.widget.AdapterView.OnItemClickListener {
//...
}
于 2014-01-24T15:35:47.753 回答
0

我会尝试两件事:

  1. 首先将fragment放在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);
        }
    });
    
于 2013-10-12T17:32:59.763 回答