2017-05-10 16 views
1

現在、アンドロイドプロジェクトで作業しています。リストビューのアイテムからアクティビティを起動する必要があります。私は多かれ少なかれ8時間を探して、常に同じ解決策を見つけました。これはうまくいきません。ListViewを構成するクリック可能なアイテム:setOnItemClickListenerは機能しません

public class CtlgArrayAdapter extends ArrayAdapter<String> { 
private static final String TAG = "CTLGADAPTER"; 

private final Activity context; 
private final String[] recipeName; 
private final String[] recipeDescr; 
private final Integer[] recipeDiff; 
private final Integer[] recipePic; 
private final Integer[] recipeEval; 

public CtlgArrayAdapter(Activity context, String[] recipeName, String[] recipeDescr, 
         Integer[] recipeDiff, Integer[] recipePic, Integer[] recipeEval) { 
    super(context, R.layout.ctlg_list, recipeName); 

    this.context = context; 
    this.recipeName = recipeName; 
    this.recipeDescr = recipeDescr; 
    this.recipeDiff = recipeDiff; 
    this.recipePic = recipePic; 
    this.recipeEval = recipeEval; 
} 

public View getView(int position, View view, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView = inflater.inflate(R.layout.ctlg_list, null, true); 

    TextView nameTile = (TextView) rowView.findViewById(R.id.ctlg_list_name); 
    TextView diffTile = (TextView) rowView.findViewById(R.id.ctlg_list_diff); 
    TextView descrTile = (TextView) rowView.findViewById(R.id.ctlg_list_descr); 
    ImageView picTile = (ImageView) rowView.findViewById(R.id.ctlg_list_img); 
    RatingBar rateTile = (RatingBar) rowView.findViewById(R.id.ctlg_list_rating); 
    nameTile.setText(recipeName[position]); 
    diffTile.setText(recipeDiff[position].toString()); 
    descrTile.setText(recipeDescr[position]); 
    picTile.setImageResource(recipePic[position]); 
    rateTile.setRating(recipeEval[position]); 

    return rowView; 
} 

問題は、私は私の項目をタップすると、何も起こらないということである。CatalogueActivityののonCreateメソッドで

CtlgArrayAdapter adapter = new CtlgArrayAdapter(this, recipeName, recipeDescr, recipeDiff, 
      recipePic, recipeEval); 
    ListView list = (ListView)findViewById(android.R.id.list); 
    list.setAdapter(adapter); 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.d(TAG, "Item clicked"); 
     } 
    });  

CtlgArrayAdapterクラス は、ここに私のコードです。すべてのインターネットは、このソリューションが、それは動作しませんと言っているようだ: '(ここで

は私の.xmlファイルは、以下のとおりです。 カタログのレイアウト:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 
<ListView 
    android:id="@android:id/list" 
    android:clickable="true" 
    android:layout_alignParentStart="true" 
    android:layout_below="@id/linear_ctlg" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> </RelativeLayout>  

とcatalogue_itemレイアウト

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<ImageView 
    android:id="@+id/ctlg_list_img" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:focusable="false" 
    android:scaleType="centerCrop" 
    android:src="@drawable/no_image" 
    android:layout_marginEnd="10dp"/> 
<TextView 
    android:id="@+id/ctlg_list_name" 
    android:textColor="@color/colorPrimary" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_toEndOf="@id/ctlg_list_img" 
    android:focusable="false" 
    android:textStyle="bold" 
    android:text="Nom de la recette sur son lit de char"/> 
<TextView 
    android:id="@+id/ctlg_list_diff" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toEndOf="@id/ctlg_list_img" 
    android:layout_below="@id/ctlg_list_name" 
    android:text="Difficile"/> 
<TextView 
    android:id="@+id/ctlg_list_descr" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/ctlg_list_diff" 
    android:layout_toEndOf="@id/ctlg_list_img" 
    android:focusable="false" 
    android:textStyle="italic" 
    android:text="Ceci est la description de la recette. J'en mets une longue pour être sûr qu'il y ait assez d'espace. Il fait beau aujourd'hui."/> 
<RatingBar 
    android:id="@+id/ctlg_list_rating" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:focusable="false" 
    android:scaleX="0.4" 
    android:scaleY="0.4" 
    android:numStars="5" 
    android:rating="3" 
    android:stepSize="1"/> </RelativeLayout> 

あなたは私のコードで間違っているものを見つけた場合soooooooがありがとうございました!:)

答えて

0

をcatelogue_itemであなたの意見のどれもがフォーカス可能かclickaていないことを確認してください以下のコードを使用してください。

android:clickable="false" 
android:focusable="false" 
android:focusableInTouchMode="false" 

はまたして、ルートレイアウトを設定してみてください。android:descendantFocusability="blocksDescendants"

リストであなたの要素のいずれかがフォーカス可能な項目が含まれている場合は理由は、リストのonclickのが呼び出されることはありません。

+0

Mmhは再試行しましたが、感謝しています:) – MySpoon

0

私はその正しい解決方法がわからない。ここ

代わり文脈のあなたの通過活性は

super(context, R.layout.ctlg_list, recipeName);、そのコンテキストを渡すためにしてみてください。

これは便利なコードに似ているpostにチェックしてください。

+0

また、この例では;)私はpronlemがこのから来ているとは思わない、ありがとう:) – MySpoon

0

フォーカス可能なものは必要ありません:falseまたはclickable:false。それらのすべてを削除することができます。あなたのカタログxmlのトップレイアウトにこのコードandroid:descendantFocusability="blocksDescendants"を追加するだけです。私はあなたのコードでそれを試して、働いた。

+0

それは私のために働くdoes'nt、とにかく感謝:) – MySpoon

+0

しかし、その仕事。私はあなたのコードで新しいプロジェクトを作成し、それを試したので。 –

+0

あなたは 'android:descendantFocusability =" blocksDescendants "プロパティをincatalogue_itemから相対レイアウトに追加してみることができます –

0

私は解決策が見つかりました:私はcatalogue_tiemレイアウトから評価バーを抑制し、今ではすべてが(それは後に表示されますので、私ははこのレイアウトでそれを維持するを必要としない)完璧に動作 を。私は、xmlファイル内の属性を変更することによって、評価バーで動作させるための解決策があると思いますが... ... nevermind :)