如何使ListView仅显示最后6个项目?

时间:2015-08-13 10:23:56

标签: android sqlite listview

我的Activity只显示listview(他从SQLite数据库中提取数据),他可以显示的数据没有限制,而且运行良好。

现在,我想在MainActivity中添加一个新的小列表视图,它只显示最后五个数据。

我在网络上的任何地方都找不到怎么做..

DataListActivity.java

   package com.example.ido.grades;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.ContextMenu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.Toast;
    public class DataListActivity extends ActionBarActivity {
        ListView listView;
        SQLiteDatabase sqLiteDatabase;
        CourseDbHelper courseDbHelper;
        Cursor cursor;
        ListDataAdaptar listDataAdaptar;
        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.update_course);
            hideActionBar();
            listView = (ListView) findViewById(R.id.list_view);
            listDataAdaptar = new ListDataAdaptar(getApplicationContext(),R.layout.row_layout);
            listView.setAdapter(listDataAdaptar);
            registerForContextMenu(listView);
            courseDbHelper = new CourseDbHelper(getApplicationContext());
            sqLiteDatabase = courseDbHelper.getReadableDatabase();
            cursor = courseDbHelper.getInformation(sqLiteDatabase);
            registerForContextMenu(listView);
            if (!cursor.moveToFirst()){
            }
            else {
                do {
                    String year,semester,course,points,grade;
                    year = cursor.getString(0);
                    semester = cursor.getString(1);
                    course = cursor.getString(2);
                    points = cursor.getString(3);
                    grade = cursor.getString(4);
                    DataProvider dataProvider  = new DataProvider(year,semester,course,points,grade);
                    listDataAdaptar.add(dataProvider);
                }
                while (cursor.moveToNext());
            }
        }
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu_data_list, menu);

        }
        public boolean onContextItemSelected(MenuItem item) {
            AdapterView.AdapterContextMenuInfo info =
                    (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
            int mySelectedRowIndex = info.position;
            switch (item.getItemId()) {
                case R.id.update_item:
                    courseDbHelper = new CourseDbHelper(getApplicationContext());
                    sqLiteDatabase = courseDbHelper.getReadableDatabase();
                    DataProvider raw2 = (DataProvider)listDataAdaptar.getItem(mySelectedRowIndex);

                    Intent i = new Intent(DataListActivity.this, UpdateCourseActivity.class);
                    String year = raw2.getYear();
                    String semester = raw2.getSemester();
                    String course =  raw2.getCourse();
                    String points =  raw2.getPoints();
                    String grade =  raw2.getGrade();
                    int semIndex;
                    if (semester.equals("A'")){
                        semIndex =1;
                    }
                    else if (semester.equals("B'")){
                        semIndex =2;
                    }
                    else{
                        semIndex=3;
                    }
                    i.putExtra("YEAR", year);
                    i.putExtra("SEMESTER", Integer.toString(semIndex));
                    i.putExtra("COURSE", course);
                    i.putExtra("POINTS", points);
                    i.putExtra("GRADE", grade);
                    i.putExtra("POS", Integer.toString(mySelectedRowIndex));

                    startActivity(i);


                    return true;
                case R.id.delete_item:
                    courseDbHelper = new CourseDbHelper(getApplicationContext());
                    sqLiteDatabase = courseDbHelper.getReadableDatabase();
                    DataProvider raw = (DataProvider)listDataAdaptar.getItem(mySelectedRowIndex);
                    courseDbHelper.deleteInformation(raw.getYear(), raw.getSemester(), raw.getCourse(), raw.getPoints(), raw.getGrade());
                    Toast.makeText(this,"delete, pos["+mySelectedRowIndex+"]",Toast.LENGTH_LONG).show();
                    finish();
                    startActivity(getIntent());
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
        public void onBackPressed() {
            startActivity(new Intent(this, MainActivity.class));
        }


        private void hideActionBar() {
            //Hide the action bar only if it exists
            if (getSupportActionBar() != null) {
                getSupportActionBar().hide();
            }
        }
        }

ListDataAdapter.java

package com.example.ido.grades;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

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

/**
 * Created by Ido on 08/08/2015.
 */
public class ListDataAdaptar extends ArrayAdapter{
        List list = new ArrayList();
    public ListDataAdaptar(Context context, int resource) {
        super(context, resource);
    }

    static class LayoutHandler{
        TextView YEAR,SEMESTER,COURSE,POINTS,GRADE;
    }
    @Override
    public void add(Object object) {
        super.add(object);
        list.add(object);
    }


    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        LayoutHandler layoutHandler;
        if (row == null){
            LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row  = layoutInflater.inflate(R.layout.row_layout,parent,false);
            layoutHandler = new LayoutHandler();
            layoutHandler.YEAR = (TextView)row.findViewById(R.id.textYear);
            layoutHandler.SEMESTER = (TextView)row.findViewById(R.id.textSemester);
            layoutHandler.COURSE = (TextView)row.findViewById(R.id.textCourse);
            layoutHandler.POINTS = (TextView)row.findViewById(R.id.textPoints);
            layoutHandler.GRADE = (TextView)row.findViewById(R.id.textGrade);
            row.setTag(layoutHandler);
        }
        else{
            layoutHandler = (LayoutHandler) row.getTag();

        }
        DataProvider dataProvider = (DataProvider) this.getItem(position);
        layoutHandler.YEAR.setText(dataProvider.getYear());
        layoutHandler.SEMESTER.setText(dataProvider.getSemester());
        layoutHandler.COURSE.setText(dataProvider.getCourse());
        layoutHandler.POINTS.setText(dataProvider.getPoints());
        layoutHandler.GRADE.setText(dataProvider.getGrade());
        return row;
    }
}

4 个答案:

答案 0 :(得分:1)

您可以移动到当前光标的最后一个位置,然后移动到获取所需数据的上一行。排序:

ArrayList string;
if (cursor.moveToLast()){
   for (int i = 1; i<=6; i++) {
   string.add(cursor.getString(cursor.getColumnIndex("your_data")));
   cursor.moveToPrevious();
   } 
}
cursor.close();

结果将是ArrayList,其中包含游标数据的最后6个字符串。您可以将其提供给新的ArrayAdapter并在屏幕上显示它。

您可以使用所有现有数据创建另一个游标,而不是ArrayList,并将其提供给现有的适配器,例如,如下所述: https://stackoverflow.com/a/18290921/4890659

答案 1 :(得分:0)

忽略你的代码,你显然有一个对象数组传递到数组适配器的构造函数。

Object[] data = new Object[]{...}
MyArrayAdapter myAdapter = new MyArrayAdapter(data ,... else)

您只需获取此data数组,并将最后6个元素追加到新数组中。

Object[] data2 = new Object[6]
for(int i = data.length()-7; i<data.length(); i++){
    data2[data.length()-i] = data[i]

然后创建一个新的适配器,传递新的data2数组。

MyArrayAdapter myAdapter = new MyArrayAdapter(data2, ... else)

答案 2 :(得分:0)

创建方法,返回光标的最后6行[SQL查询]。

 public class Add_to_cart extends Fragment {

    private Button continue_shopping;
    private Button checkout;
    ListView list;
    private TextView _decrease,mBTIncrement,_value;
    private CustomListAdapter adapter;
    private ArrayList<String> alst;
    private ArrayList<String> alstimg;
    private ArrayList<String> alstprc;
    private String bname;
    private ArrayList<String> alsttitle;
    private ArrayList<String> alsttype;

    public static ArrayList<String> static_Alst;
    public Add_to_cart(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

        final View rootView = inflater.inflate(R.layout.list_view_addtocart, container, false);

        alst=new ArrayList<String>();
        alstimg=new ArrayList<String>();
        Bundle bundle = this.getArguments();
        alst = bundle.getStringArrayList("prducts_id");
        alsttype = bundle.getStringArrayList("prducts_type");
        alstimg=bundle.getStringArrayList("prducts_imgs");
        alsttitle=bundle.getStringArrayList("prducts_title");

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        System.out.println("TEst--" + alst);

       // Toast.makeText(getActivity(),"Testing"+alstimg,Toast.LENGTH_LONG).show();
        list=(ListView)rootView.findViewById(R.id.list_addtocart);

        adapter = new CustomListAdapter(getActivity(),alst,alstimg,alsttitle,alsttype);

        list.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                // TODO Auto-generated method stub
            }
        });
        return rootView;
    }

    public class CustomListAdapter extends BaseAdapter {

        private Context context;
        private ArrayList<String> listData;
        private ArrayList<String> listDataimg;
        private ArrayList<String> listDatatitle;
        private ArrayList<String> listDatatype;
        private AQuery aQuery;
        String dollars="\u0024";

        public CustomListAdapter(Context context,ArrayList<String> listData,ArrayList<String> listDataimg,ArrayList<String> listDatatitle,ArrayList<String> listDatatype) {
            this.context = context;
            this.listData=listData;
            this.listDataimg=listDataimg;
            this.listDatatitle=listDatatitle;
            this.listDatatype=listDatatype;
           aQuery = new AQuery(this.context);
        }

        public void save_User_To_Shared_Prefs(Context context) {
            SharedPreferences appSharedPrefs = PreferenceManager
                    .getDefaultSharedPreferences(context.getApplicationContext());
            SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
            Gson gson = new Gson();
            String json = gson.toJson(listData);
            Add_to_cart.static_Alst=listData;
            prefsEditor.putString("user", json);
            prefsEditor.commit();
        }

        @Override
        public int getCount() {
            return listData.size();
        }

        @Override
        public Object getItem(int position) {
            return listData.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = LayoutInflater.from(getActivity()).inflate(R.layout.list_item_addtocart, null);
                holder.propic = (ImageView) convertView.findViewById(R.id.img_addtocart);
                holder.txtproname = (TextView) convertView.findViewById(R.id.proname_addtocart);
                holder.txtprofilecast = (TextView) convertView.findViewById(R.id.proprice_addtocart);
                holder.txtsize = (TextView) convertView.findViewById(R.id.txt_size);
                _decrease = (TextView) convertView.findViewById(R.id.minuss_addtocart);
                mBTIncrement = (TextView) convertView.findViewById(R.id.plus_addtocart);
                _value = (EditText)convertView.findViewById(R.id.edt_procount_addtocart);

                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }

            mBTIncrement.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    increment();
                }
            });

            _decrease.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    decrement();
                }
            });

            holder.txtprofilecast.setText(dollars+listData.get(position));
            holder.txtproname.setText(listDatatitle.get(position));
            holder.txtsize.setText(listDatatype.get(position));
            System.out.println("Image ka array " + listDataimg.get(position));

            //Picasso.with(mContext).load(mThumbIds[position]).centerCrop().into(imageView);
            // Picasso.with(context).load(listDataimg.get(position)).into(holder.propic);
            aQuery.id(holder.propic).image(listDataimg.get(position), true, true, 0, R.drawable.ic_launcher);

            return convertView;
        }

        class ViewHolder{
            ImageView propic;
            TextView txtproname;
            TextView txtprofilecast;
            TextView txtsize;
        }
    }
}

SQL:

cursor = courseDbHelper.getInformationLast_6(sqLiteDatabase);

答案 3 :(得分:0)

通过此,您可以在列表中获得6个项目。尝试使用适配器类中的以下代码。

public int getCount() {
        return 6;
    }

按升序或降序将查询更改为限制6