与自定义形状列表项很好地配合使用!
问题1:如何使用列表项的自定义形状?
问题2:如何显示选择了哪个列表项?
问题3:我如何初始设置列表项?
编辑:经过长时间的搜索,我找到了(在朋友的帮助下)答案。我在'下面'答案中写了它们。
享受!!
答案 0 :(得分:1)
最后(在朋友的帮助下)我找到了所有答案。 该代码适用于多个版本。这结束了长时间的搜索,我希望这对你有所帮助!
答案1:列表项的自定义布局很好。 Customshape和customshape_pressed。改变它们,这只是一个例子。
答案2:点击列表项后,显示海关形状按下的颜色。
答案3:设置初始列表项。是的,请参阅“布丁的证明”。
如果遇到任何问题,请使用alpha绘制颜色(如本例所示)。当然你问:为什么同时使用listselector和list_item_background ......我们只说...这是我们找到的最佳方式。
1主要应用程序:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.activity_main);
List<String> items = Arrays.asList( "First", "Two", "Three", "Four", "Five", "Six", "Seven");
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>( this, R.layout.string_entry_v2, items);
m_listView = (ListView) findViewById( R.id.list_2);
m_listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
m_listView.setAdapter(adapter2);
m_listView.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick( AdapterView<?> parent, View view, int position, long id) {
Log.v( "List2", "Clicked");
}
});
// ==== SOLVING question 2: setting a default row - WITH feedback
m_listView.setItemChecked(2, true);
}
2布局文件:activity_main.xml
<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"
tools:context="com.example.listselectorexample2.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="List selector" />
<ListView
android:id="@+id/list_2"
android:layout_width="match_parent"
android:layout_height="150dp"
android:listSelector="@drawable/row_selector"
android:scrollbars="vertical" />
</LinearLayout>
list-item条目:string_entry_v2.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="demo text"
android:background="@drawable/row_item_background" />
3 listselector的可绘制文件:row_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:state_pressed="true"
android:drawable="@drawable/customshape_pressed" />
<item android:state_activated="true"
android:drawable="@drawable/customshape_pressed" />
<item android:drawable="@drawable/customshape" />
</selector>
并且......对于行:row_item_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_activated="true"
android:drawable="@drawable/customshape_pressed" />
<item android:drawable="@drawable/customshape" />
</selector>
4列表项的自定义形状:customshape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#77ececc9"
android:endColor="#77ececc9"
android:angle="270"/>
<corners
android:bottomRightRadius="15dp"
android:bottomLeftRadius="15dp"
android:topLeftRadius="15dp"
android:topRightRadius="15dp"/>
</shape>
和customshap_pressed.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#b6dde4"
android:endColor="#b6dde4"
android:angle="270"/>
<corners
android:bottomRightRadius="15dp"
android:bottomLeftRadius="15dp"
android:topLeftRadius="15dp"
android:topRightRadius="15dp"/>
</shape>
答案 1 :(得分:0)
我发现代码中有一些不需要的行试图删除它们
List<String> items = Arrays.asList( "First", "Two", "Three", "Four");
ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, R.layout.string_entry, items);
ListView listview = (ListView) findViewById( R.id.the_list);
listview.setAdapter( adapter);
//adapter.notifyDataSetChanged();
//listview.invalidate();
listview.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick( AdapterView<?> parent, View view, int position, long id) {
// view.setSelected(true);
Log.v( "List1", "Clicked");
}
});
adapter.notifyDataSetChanged();
,因为在设置适配器后ListView
中的项目没有变化。listview.invalidate();
,因为没有必要让ListView
变得肮脏view.setSelected(true);
,因为它会在外部更改视图状态,因为它会在内部完成。