データを表示する必要がある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);
しかし、私はより良い解決策がないとは信じられません。何か案が?
ここにコメントがあります:
その方法の1つは、ListView.setOnClickListener(null);
ORです。
あなたは付け加えられます Android:focusable="false"
Android:focusableInTouchMode="false"
OR
レイアウトの別の方法Android:listSelector="@Android:color/transparent"
乾杯。
アダプタで isEnabled(position) をオーバーライドし、falseを返すだけです
@Override
public boolean isEnabled(int position) {
return false;
}
以下のメソッドをオーバーライドします。 falseを返すと、すべてのアイテムがクリック不可になります。
@override
public boolean areAllItemsEnabled() {
return false;
}
そして、以下のメソッドをオーバーライドして、クリックできないアイテムを返します
public boolean isEnabled(int position) {
if(position == your_item_pos) {
return false;
}
return true;
}
Android:listSelector="@Android:color/transparent"
クリックされたときの色を、クリックされていないときと同じ色に変更します!プレーンテキストのように見えます...回避策です。
このメソッドをアダプタクラスにコピーするだけです。何もしません.........
@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;
}
簡単な方法:
listView.setSelector(Android.R.color.transparent);
使用できます
yourListView.setOnItemClickListener(null);
Android:focusable="true"
リストビュー内のアイテムのいずれかにリストビューがクリックできないようになりました
データを表示するだけのこのListViewがあります。したがって、クリック可能にしたくありません。
私は自分のプロジェクトの1つでこれを実行しましたが、サンプルの怒鳴りは正常に機能します。
基本的に、あなただけが必要です:
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で、画面にデータを表示するだけです。
リストビューにAndroid:enabled = "false"を設定するだけで、メソッドをオーバーライドし続ける必要がなくなります。
このコードを試してください
Adapter.getView()
i.setOnClickListener( null );
i.setLongClickable( false );
i.setClickable( false );
これは、ListViewアイテムにフォーカス可能な要素またはクリック可能な要素がある可能性があるためです。XMLレイアウトファイルまたはコードで次のアプローチを試してください。
この属性をListItem XMLファイルのルートViewGroup要素に追加します(つまり、LinearLayout、RelativeLayout、...):
Android:descendantFocusability = "blocksDescendants"
リストアイテム(ほとんどの場合、getView()
またはnewView()
)の作成/リサイクルを行うList Adapterメソッドに次の行を追加します。一方、親はリストアイテムのViewGroupです。
parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
実際、@ 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);
}