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)