Android 列表项在listview中的位置不正确
我正在制作一个应用程序,其中我需要一个列表视图来显示任务列表。这是一个基于位置的提醒应用程序。但在列表视图中,每当我向列表中添加一项(任务)时,它都会出现在底部。 我的意思是,我希望第一个项目被添加到列表的顶部,但它会出现在底部。那么,有什么帮助吗 下面是列表的内容:Android 列表项在listview中的位置不正确,android,android-listview,Android,Android Listview,我正在制作一个应用程序,其中我需要一个列表视图来显示任务列表。这是一个基于位置的提醒应用程序。但在列表视图中,每当我向列表中添加一项(任务)时,它都会出现在底部。 我的意思是,我希望第一个项目被添加到列表的顶部,但它会出现在底部。那么,有什么帮助吗 下面是列表的内容: list: first item second item 以下是我想要的: list: first item second item .. 以下是设置适配器和listview的代码: package c
list:
first item
second item
以下是我想要的:
list:
first item
second item
..
以下是设置适配器和listview的代码:
package com.example.fsdf;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Collections;
public class Second extends ActionBarActivity {
SQLiteDatabase mydatabase;
ListView lv;
int CheckedItem;
private Button button;
private Button button2;
double lat[] = new double[100];
double longt[] = new double[100];
ArrayAdapter <String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
lv = (ListView) findViewById(R.id.listView1);
mydatabase = openOrCreateDatabase("seproject", MODE_PRIVATE, null);
Cursor cursor = mydatabase.rawQuery("Select * from Store", null);
final ArrayList<String> list = new ArrayList<String>();
int i = 0;
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
do {
String s= cursor.getString(0);
list.add(cursor.getString(0));
lat[i] = Double.parseDouble(cursor.getString(1));
longt[i++] = Double.parseDouble(cursor.getString(2));
} while (cursor.moveToNext());
mydatabase.close();
}
Collections.reverse(list); //Kept this here. It worked.
adapter = new marrayadapter(this,list);
lv.setAdapter(adapter);
lv.setItemChecked(0, true);
CheckedItem = 0;
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
CheckedItem = (position);
}
});
button = (Button) findViewById(R.id.button2);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
try {
mydatabase = openOrCreateDatabase("seproject", 0, null);
mydatabase.delete("Store", "Job" + "='" + list.get(CheckedItem) + "'", null);
Toast.makeText(Second.this, "Deleted", Toast.LENGTH_LONG).show();
mydatabase.close();
/* Intent i = new Intent(Second.this, Second.class);
startActivity(i);
finish(); Replaced with following*/
list.remove(CheckedItem);
adapter.notifyDataSetChanged();
}
catch (Exception e)
{
Toast.makeText(Second.this,"No tasks to delete.", Toast.LENGTH_SHORT).show();
}
}
});
button2 = (Button) findViewById(R.id.button1);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
mydatabase = openOrCreateDatabase("seproject", 0, null);
mydatabase.delete("Store", "Job" + "='" + list.get(CheckedItem) + "'", null);
Intent i = new Intent(Second.this, Edit.class);
i.putExtra("job", list.get(CheckedItem));
i.putExtra("lat", lat[CheckedItem]);
i.putExtra("longt", longt[CheckedItem]);
startActivity(i);
mydatabase.close();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.menu_add:
Intent i = new Intent(Second.this, MainActivity.class);
startActivity(i);
return true;
default:
return super.onOptionsItemSelected(item);
}
/* if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
*/
}
}
在设置适配器之前,将
集合。反转功能移到列表上:
Collections.reverse(list);
adapter = new marrayadapter(this,list);
lv.setAdapter(adapter);
您需要在第0个索引处添加列表项,list.add(0,cursor.getString(0))代码>
试试这个..那么你想做什么?我希望列表在listview中按顺序排列。我的意思是,添加的第一项应该在列表的顶部,但它在底部。只有一个解决方案使用了自定义适配器
我使用了自定义适配器。(参见代码中的“marrayadapter”)。请参见我更新的问题。抱歉不清楚,我是新手。请看我的最新问题。抱歉不清楚,我是新手。请看我的最新问题。抱歉说不清楚,我是新手。
Collections.reverse(list);
adapter = new marrayadapter(this,list);
lv.setAdapter(adapter);
int index = this.list.getFirstVisiblePosition() + list.size();
View v = this.list.getChildAt(list.getHeaderViewsCount());
int top = (v == null) ? 0 : v.getTop();
this.adapter.AddRangeToTop(comments);
this.adapter.notifyDataSetChanged();
this.list.setSelectionFromTop(index, top)