ListViewItem 灰显
Posted
技术标签:
【中文标题】ListViewItem 灰显【英文标题】:ListViewItem is grayed out 【发布时间】:2021-07-29 15:08:30 【问题描述】:我目前正在用 android 编写一个应用程序。在这个应用程序中,我有一个 ListActivity,里面有一个 ListView。我希望这个 ListView 有自定义项目,所以我编写了一个自定义 BaseAdapter 来指定我的项目。到目前为止效果很好。 这是 ListActivity 的 XML 代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:descendantFocusability="blocksDescendants"
android:layout_
android:layout_
tools:context=".PalettenActivity" >
<ListView
android:id="@+id/listViewPaletten"
android:layout_
android:layout_
android:entries="@layout/paletten_item"
android:minHeight="?android:attr/listPreferredItemHeight" >
</ListView>
</RelativeLayout>
我还为该项目编写了一个 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layoutPalettenItem"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_
android:layout_
android:padding="10dp"
tools:context=".PalettenAdapter" >
<TextView
android:id="@+id/textViewPalettenBez"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:gravity="left|center_vertical"
android:text="Bezeichnung"
android:textSize="25sp" />
<Button
android:id="@+id/buttonPalettenPlus"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:text="+"
android:textSize="20sp" />
<TextView
android:id="@+id/textViewPalettenAnzahl"
android:layout_
android:layout_
android:layout_alignBaseline="@+id/buttonPalettenPlus"
android:layout_alignBottom="@+id/buttonPalettenPlus"
android:layout_toLeftOf="@+id/buttonPalettenPlus"
android:gravity="center"
android:text="0"
android:textSize="20sp" />
<Button
android:id="@+id/buttonPalettenMinus"
android:layout_
android:layout_
android:layout_alignBaseline="@+id/textViewPalettenAnzahl"
android:layout_alignBottom="@+id/textViewPalettenAnzahl"
android:layout_toLeftOf="@+id/textViewPalettenAnzahl"
android:text="-"
android:textSize="20sp" />
</RelativeLayout>
现在我面临的问题是 ListItem 在 ListView 中显示为灰色,因此我无法按下任何按钮。
如您所见,我在项目上尝试了android:focusable="false"
和android:focusableInTouchMode="false"
,在ListView 上尝试了android:descendantFocusability="blocksDescendants"
。但什么都没有改变。
这是它的外观: 如您所见,底部的按钮看起来很正常,但该项目的所有视图都是灰色的。
这是我的 ListActivity 的 onCreate() 代码:
super.onCreate(savedInstanceState);
dataSource = new DataSource(this);
int id_lieferschein = getID_Lieferschein();
if (id_lieferschein > 0)
paletten = ladePaletten(id_lieferschein);
/*"ladePaletten()" extracts data form a SQLite-DB and stores it into a
ArrayList called "paletten". */
if (paletten != null && paletten.size() > 0)
adapter = new PalettenAdapter(this, paletten); // my BaseAdapter
listViewPaletten = getListView();
listViewPaletten.setAdapter(adapter);
listViewPaletten.setEnabled(true);
这是我的 BaseAdapter 的 getView():
try
LayoutInflater itemInflater =(LayoutInflater)parent.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
/* "parent" is my ListActivity. It`s a private variable of my BaseAdapter. I hand it over in the constructor of this class */
if (convertView == null)
convertView = itemInflater.inflate(R.layout.paletten_item, null);
convertView.setMinimumHeight(120);
convertView.setEnabled(true);
ladePalette(convertView, paletten.get(position), position);
/* in "ladePaletten()" i attach some onClickListeners to some
buttons of the ListView-Item. */
catch (Exception e)
Log.e(TAG, e.getMessage());
e.printStackTrace();
return convertView;
如果有人可以帮助我解决这个问题,我会很高兴。 . 谢谢你的帮助! 莫里斯 F.
【问题讨论】:
请添加 listactivity 和 baseAdapter 的代码。 就这么做了。如果您需要更多信息,请告诉我 【参考方案1】:在您的 XML 文件中,您编写了 entry 属性。因此,请删除它,因为您正在通过适配器和 xml 添加值(顺便说一下,您正在添加布局而不是数组)。因此两者都是冲突的,您不需要在 Listview 中写入 xml。
而不是,
<ListView
android:id="@+id/listViewPaletten"
android:layout_
android:layout_
android:entries="@layout/paletten_item"
android:minHeight="?android:attr/listPreferredItemHeight" >
</ListView>
致,
<ListView
android:id="@+id/listViewPaletten"
android:layout_
android:layout_
android:minHeight="?android:attr/listPreferredItemHeight" >
</ListView>
另外,我附上了自定义列表视图的示例。
1) activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="#FF9D9D"
tools:context=".MainActivity">
<ListView
android:id="@+id/listViewPaletten"
android:layout_
android:layout_
android:minHeight="?android:attr/listPreferredItemHeight" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
2) Paletten_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layoutPalettenItem"
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_
android:layout_
android:padding="10dp">
<TextView
android:id="@+id/textViewPalettenBez"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:gravity="left|center_vertical"
android:text="Bezeichnung"
android:textSize="25sp" />
<Button
android:id="@+id/buttonPalettenPlus"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:text="+"
android:textSize="20sp" />
<TextView
android:id="@+id/textViewPalettenAnzahl"
android:layout_
android:layout_
android:layout_alignBaseline="@+id/buttonPalettenPlus"
android:layout_alignBottom="@+id/buttonPalettenPlus"
android:layout_toLeftOf="@+id/buttonPalettenPlus"
android:gravity="center"
android:text="0"
android:textSize="20sp" />
<Button
android:id="@+id/buttonPalettenMinus"
android:layout_
android:layout_
android:layout_alignBaseline="@+id/textViewPalettenAnzahl"
android:layout_alignBottom="@+id/textViewPalettenAnzahl"
android:layout_toLeftOf="@+id/textViewPalettenAnzahl"
android:text="-"
android:textSize="20sp" />
</RelativeLayout>
3) MainActivity.java
public class MainActivity extends AppCompatActivity
ListView listView;
private String[] names =
"Item1",
"Item2",
"Item3",
"Item4",
"Item5"
;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listViewPaletten);
listView.setAdapter(new ListviewAdapter(names,getApplicationContext()));
4) ListviewAdapter.java
public class ListviewAdapter extends BaseAdapter
private String[] names;
Context context;
public ListviewAdapter(String[] names, Context context)
this.names = names;
this.context = context;
@Override
public int getCount()
return names.length;
@Override
public Object getItem(int position)
return null;
@Override
public long getItemId(int position)
return 0;
@Override
public View getView(int position, View convertView, ViewGroup parent)
if (convertView == null)
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.paletten_item,parent,false);
TextView tv_names = convertView.findViewById(R.id.textViewPalettenBez);
tv_names.setText(names[position]);
return convertView;
【讨论】:
感谢您的详细解答!我的 MainActivity 现在扩展了 Activity 而不再是 ListActivity,我已经从我的 XML 中删除了android:entries="@layout/paletten_item"
,我在 my onCreate()
中删除了 setContentView(R.layout.activity_paletten);
和 adapter = new PalettenAdapter(this, paletten); // paletten is a ArrayList
listViewPaletten = (ListView)findViewById(R.id.listViewPaletten);
listViewPaletten.setAdapter(adapter);
listViewPaletten.setEnabled(true);
但没有任何变化。所有的项目都是灰色的。以上是关于ListViewItem 灰显的主要内容,如果未能解决你的问题,请参考以下文章
从 ListView 获取 ListViewItem 而不是 Item
禁用UWP ListView控件的ListViewItem显示效果