我正在开发Android应用。在我的应用中有一项活动,它有一个ListView
。 ListView
元素动态(以编程方式)更改。但是当我添加一个新元素时,listview会滚动并且我不想要它。我想向listview添加元素,用户只有在用户与其交互时才会看到新元素,而不是自动查看。我在listview适配器上调用notifyDataSetChanged()
。
我有一个例子来澄清我的意思:
ListView contains = **{ 1 , 2 , 3 , 4 , 5}
但屏幕尺寸只允许其中3个。假设现在{3, 4, 5}
在屏幕上。
现在,我们添加'6'
元素,listview自动滚动到顶部,屏幕显示{4 , 5 , 6}
我想在添加'6'
元素时,listview不要滚动并显示相同的内容(要保持一致),如果用户与listview进行交互并滚动,他看到了'6'
元素。
答案 0 :(得分:0)
更新列表后,只需致电listView.setSelectionAfterHeaderView();
答案 1 :(得分:0)
我也是新手。 我尝试在按钮点击时向listview添加元素,我没有遇到这些问题....
<RelativeLayout
...>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="133dp">
</ListView>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="55dp"
android:text="Button" />
public class MainActivity extends Activity {
ListView lv;
Button btn;
int counter = 0;
ArrayAdapter<String> adapter;
ArrayList<String> array = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView1);
btn = (Button) findViewById(R.id.button1);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String s = "Clicked "+ ++counter;
array.add(s);
adapter.notifyDataSetChanged();
}
});
lv.setAdapter(adapter);
}
}
它不会自动滚动到底部 但是如果你添加
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
到listview xml,然后在向listview添加新元素时自动滚动到底部。
我希望它有所帮助。