2013-10-12 1 views
2

가로 스크롤 가능 메뉴로 사용되는 가로 스크롤 가능 ListView이 필요합니다.HListView의 항목을 HorizontalListView를 사용하여 클릭 할 수 없습니다.

나는 해결책을 찾고 나서 this library을 찾았다.

it.sephiroth.android.library.widget.HListView 개체에 it.sephiroth.android.library.widget.AdapterView.OnItemClickListener을 구현하려고합니다.

목록을 채울 수는 있지만 항목에 리스너를 연결할 수없는 것처럼 보입니다. 나는 이것을 알아 내기 위해 이틀 동안 노력했지만 아무런 게임도하지 않았다. 이 기능은 여전히 ​​작동하지 않습니다. 이 내 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> 

입니다

<?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된다 그래서

fragment_layout.xml 내 DialogFragment의 XML입니다 .. 구원에 대한 기존의 WWW로 전환

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

매우 기본입니다.

내 MainActicity은 다음과 같습니다

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 

    } 

} 

와 (나는 HorizontalVariableListViewDemo에서 사용할 때 작동하는)이 어댑터입니다 :

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


} 

여러분 중 한 명이 내 맹점을 볼 수 있기를 바랍니다. Thaks

+0

보기를 만들 때 어댑터 내부에서 클릭 리스너를 설정해보십시오. – Mikel

답변

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

을 아마 잘못된 OnItemClickListener를 구현하고 있습니다.

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