web-dev-qa-db-ja.com

ListViewがクリックできないように設定する方法

データを表示する必要があるListViewがあります。
したがって、クリック可能にしたくありません。
最初に、XMLリストビューを次のように変更してみました。

<ListView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true"
        Android:clickable="false" >

しかし、うまくいきませんでした。
だから私の問題を解決するために、コードで設定しました:

  list.setSelector(Android.R.color.transparent); 

しかし、私はより良い解決策がないとは信じられません。何か案が?

33
Tizianoreica

ここにコメントがあります:

その方法の1つは、ListView.setOnClickListener(null); ORです。

あなたは付け加えられます Android:focusable="false"Android:focusableInTouchMode="false" OR

レイアウトの別の方法Android:listSelector="@Android:color/transparent"

乾杯。

54
g00dy

アダプタで isEnabled(position) をオーバーライドし、falseを返すだけです

@Override
public boolean isEnabled(int position) {
    return false;
}
52
Arun C

以下のメソッドをオーバーライドします。 falseを返すと、すべてのアイテムがクリック不可になります。

 @override
  public boolean areAllItemsEnabled() {
    return false;
  }

そして、以下のメソッドをオーバーライドして、クリックできないアイテムを返します

public boolean isEnabled(int position) {
    if(position == your_item_pos) {
          return false;
    }
    return true;
}
12
Sunil Kumar
Android:listSelector="@Android:color/transparent"

クリックされたときの色を、クリックされていないときと同じ色に変更します!プレーンテキストのように見えます...回避策です。

4
Shivendra

このメソッドをアダプタクラスにコピーするだけです。何もしません.........

@Override
public boolean isEnabled(int position) {

    return false;
}

選択したアイテムをクリックできないようにするための条件を設定できます。

@Override
public boolean isEnabled(int position) {
    //Y for non clickable item
      if(data_list.get(position).equalsIgnoreCase("Y"))
        {
            return false;
        }
    return true;
}
2
Ashish Saini

簡単な方法:

listView.setSelector(Android.R.color.transparent);
1
Andrey

使用できます

yourListView.setOnItemClickListener(null);
1
smartmouse
Android:focusable="true"

リストビュー内のアイテムのいずれかにリストビューがクリックできないようになりました

1
Bald bcs of IT

データを表示するだけのこのListViewがあります。したがって、クリック可能にしたくありません。

私は自分のプロジェクトの1つでこれを実行しましたが、サンプルの怒鳴りは正常に機能します。

基本的に、あなただけが必要です:

  • データソース(ArrayListなど)
  • listViewウィジェット
  • データソースをListViewにバインドするためのArrayAdapter


MainActivity.Java

package com.sample.listview;

import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;

import Android.widget.ArrayAdapter;
import Android.widget.ListView;

    public class SecondActivity extends AppCompatActivity {

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

         // data source
         String[] arrayData = {"Debian", "Ubuntu", "Kali", "Mint"};

         // ListView Widget from a Layout
         ListView listView = (ListView) findViewById(R.id.mainListView);

         // an ArrayAdapter (using a layout as model for displaying the array items)
         ArrayAdapter aa = new ArrayAdapter<String>(this, R.layout.main_list_item_layout, arrayData);

         // binding the ArrayAdapter with the ListView Widget
         listView.setAdapter(aa);
    }
}


activity_main.xml
--->ListViewウィジェットがlayout_widthとlayout_heightにwrap_contentを使用していることを確認してください

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.sample.listview.MainActivity">


    <ListView
        Android:id="@+id/mainListView"
        Android:layout_width="wrap_content"  <---- HERE
        Android:layout_height="wrap_content" <---- HERE
        />

</LinearLayout>


main_list_item_layout.xml

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/mainListItem"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:textColor="#ff0000"
    Android:textSize="20sp"
    >

</TextView>



それだけですクリックできないListViewで、画面にデータを表示するだけです。

0
ivanleoncz

リストビューにAndroid:enabled = "false"を設定するだけで、メソッドをオーバーライドし続ける必要がなくなります。

0
AndroidMech

このコードを試してください

Adapter.getView()

i.setOnClickListener( null );
i.setLongClickable( false );
i.setClickable( false );
0
Developer

これは、ListViewアイテムにフォーカス可能な要素またはクリック可能な要素がある可能性があるためです。XMLレイアウトファイルまたはコードで次のアプローチを試してください。

  1. この属性をListItem XMLファイルのルートViewGroup要素に追加します(つまり、LinearLayout、RelativeLayout、...):

    Android:descendantFocusability = "blocksDescendants"

  2. リストアイテム(ほとんどの場合、getView()またはnewView())の作成/リサイクルを行うList Adapterメソッドに次の行を追加します。一方、親はリストアイテムのViewGroupです。

    parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

0
MrDEV

実際、@ override isEnabled()およびsetOnClickListener(null)setClickable(false)setLongClickable(false)が機能していません。 performItemClickをオーバーライドして解決します

@Override
public boolean performItemClick(View view, int position, long id) {
 if(!clickAble){
     return false;
 }
    return super.performItemClick(view,position,id);
}
0
coney