列表视图 - 列表项选择和初始设置(自定义项)

时间:2015-05-23 05:59:46

标签: android android-layout android-listview

与自定义形状列表项很好地配合使用!

问题1:如何使用列表项的自定义形状?

问题2:如何显示选择了哪个列表项?

问题3:我如何初始设置列表项?

编辑:经过长时间的搜索,我找到了(在朋友的帮助下)答案。我在'下面'答案中写了它们。

享受!!

2 个答案:

答案 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);,因为它会在外部更改视图状态,因为它会在内部完成。