2011-05-15 82 views
0

所以我们有一个列表视图,并且希望使其中的某些项目位于“上方”,即可见(即向上滚动以查看它们)。setSelection()的作品但只有当ListView有足够的项目滚动屏幕已经..任何人有任何想法如何实现这个时,列表中只有几个项目呢?没有填充视口的ListView上的setSelection()

+0

要澄清,选择上方的项目是否必须在屏幕外?如果是这样,那么解决方案可能只是用足够的不可选空项填充下面的空间。 – 2011-05-15 20:02:21

+0

你会怎么做呢?每个项目都有按钮等与之相关联,如果我们只是添加空项目,它会显得很杂乱/不专业。这是一个动态列表。 – 2011-05-15 20:12:14

回答

0

setSelection()会工作,但如果该项目已经在屏幕上,你不应该看到任何区别。请记住,在触摸模式下,列表项不会显示为选中状态。

+0

是的..那是我的问题。我们正试图将特定的列表项目锚定到屏幕的顶部,而不管屏幕上有多少项目。 – 2011-05-15 20:08:58

+0

这不是listview的工作方式。 – 2011-05-15 20:28:14

+0

所以没办法做到这一点? :/。也许像上述评论者所建议的空白间隔符? – 2011-05-15 20:30:49

0

这结合了塔内的实例的ListView之一,信息从Android ListView child View setEnabled() and setClickable() do nothing

package com.stackoverflow.q6010765; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Main extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    List<Datum> data = new ArrayList<Datum>(); 
    data.add(new Datum("FIRST", "One line of text.")); 
    data.add(new Datum("SECOND", "Two lines of text. Two lines of text. Two lines of text.")); 
    data.add(new Datum("THIRD", "Three or more lines of text. Three or more lines of text. Three or more lines of text. Three or more lines of text. Three or more lines of text. Three or more lines of text.")); 
    data.add(new Datum("FOURTH", "One line of text, again.")); 

    ListView myList = (ListView) findViewById(R.id.my_list); 
    myList.setAdapter(new MyAdapter(this, R.layout.row, data)); 

    myList.setSelection(2); 
    } 
} 

class Datum 
{ 
    String left, right; 

    Datum(String left, String right) 
    { 
    this.left = left; 
    this.right = right; 
    } 
} 

class MyAdapter extends ArrayAdapter<Datum> 
{ 
    private final List<Datum> data; 
    private final int originalDataLength; 
    private int textViewResourceId; 

    MyAdapter(Context context, int textViewResourceId, List<Datum> data) 
    { 
    super(context, textViewResourceId, data); 
    this.data = data; 
    this.originalDataLength = data.size(); 
    for (int i = 0; i < 20; i++) 
    { 
     data.add(new Datum("", "")); 
    } 
    this.textViewResourceId = textViewResourceId; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
    if (convertView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(textViewResourceId, null); 
    } 
    Datum datum = data.get(position); 
    if (datum != null) 
    { 
     TextView leftView = (TextView) convertView.findViewById(R.id.left_text); 
     TextView rightView = (TextView) convertView.findViewById(R.id.right_text); 
     if (leftView != null) 
     { 
     leftView.setText(datum.left); 
     } 
     if (rightView != null) 
     { 
     rightView.setText(datum.right); 
     } 
    } 
    if (datum.left.length() == 0) 
    { 
     convertView.setFocusable(false); 
     convertView.setClickable(false); 
    } 
    return convertView; 
    } 

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

    @Override 
    public boolean isEnabled(int position) 
    { 
    return position < originalDataLength; 
    } 
}

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<ListView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/my_list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" />

row.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical"> 
    <TextView 
     android:id="@+id/left_text" 
     android:layout_width="75dip" 
     android:layout_height="wrap_content" /> 
    <TextView 
     android:id="@+id/right_text" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:maxLines="2" 
     android:ellipsize="end" /> 
</LinearLayout>

+0

我试图复制上面没有运气:http://sprunge.us/DOeL – 2011-05-16 02:35:32

+0

复制我发布的内容很容易。只需复制并粘贴。如果您要描述您遇到的问题并发布复制问题所需的完整最小代码,我会查看您的具体情况。 – 2011-05-16 02:59:44

+0

乍一看,for循环似乎没有将任何额外的项目添加到列表中。 – 2011-05-16 03:21:22