第一个元素在GridView适配器的列表末尾弹出

问题描述 投票:1回答:1

所以我有DashboardFragment,它具有项目的网格视图,当按下网格中的最后一个项目时,它会打开new activity,以将新类别添加到数据库中,然后将其添加到数据库中,[关闭和DashboardFragment中的网格应在网格末尾使用新元素进行更新。这是我想出的代码,它的问题是,每当我添加新类别时,都会更新网格,但列表的第一个元素在网格末尾。当我重新启动应用程序时,新元素在末尾,一切都按需显示,因此它将元素正确添加到数据库中。在调试器中,两个列表(一个在适配器中,一个在主类中)是相同的,并在末尾添加了新元素。我花了半天时间寻找解决方案,但我找不到导致此问题的原因。

public class DashboardFragment extends Fragment { private DashboardViewModel dashboardViewModel; List<Category> categories = new ArrayList<>(); PieChart chart; CategoryAdapter adapter; DBHelper dbHelper; SQLiteDatabase database; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { dashboardViewModel = ViewModelProviders.of(this).get(DashboardViewModel.class); View root = inflater.inflate(R.layout.fragment_dashboard, container, false); setHasOptionsMenu(true); //-----Database dbHelper = new DBHelper(super.getContext()); //-----Categories ParseCategories(); final ExpandableHeightGridView gridView = (ExpandableHeightGridView) root.findViewById(R.id.category_grid); adapter = new CategoryAdapter(root.getContext(), categories); gridView.setAdapter(adapter); gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == categories.size() - 1) { startActivityForResult(new Intent(DashboardFragment.super.getContext(), CategoryCreation.class),1); } } }); gridView.setExpanded(true); //-----Chart chart = (PieChart) root.findViewById(R.id.chart); setupPieChart(); return root; } @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode==1){ ParseCategories(); adapter.updateCategoryList(categories); } } public void ParseCategories() { categories.clear(); database = dbHelper.getWritableDatabase(); Cursor c = database.rawQuery("select * from categories", null); c.moveToFirst(); for (int i = 0; i < c.getCount(); i++) { int id = c.getInt(c.getColumnIndex("_id")); String name = c.getString(c.getColumnIndex("name")); double amount = c.getDouble(c.getColumnIndex("amount")); int imageId = c.getInt(c.getColumnIndex("iconId")); categories.add(new Category(id, name, amount, imageId)); c.moveToNext(); } categories.add(new Category(-1, "Add", -1, R.drawable.add_category_icon)); c.close(); database.close(); } public class CategoryAdapter extends BaseAdapter { private Context context; private List<Category> categories; public CategoryAdapter(Context context, List<Category> cats) { this.context = context; this.categories = cats; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View gridView; if (convertView == null) { gridView = new View(context); gridView = inflater.inflate(R.layout.dashboard_category_item, null); TextView nameView = (TextView) gridView.findViewById(R.id.category_name); ImageView imageView = (ImageView) gridView.findViewById(R.id.grid_item_image); TextView amountView = (TextView) gridView.findViewById(R.id.category_amount); nameView.setText(categories.get(position).getName()); imageView.setImageResource(categories.get(position).getIconId()); if (categories.get(position).getAmount() >= 0) { amountView.setText("$" + categories.get(position).getAmount()); } else { amountView.setText(""); } } else { gridView = (View) convertView; } return gridView; } @Override public int getCount() { return categories.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } public void updateCategoryList(List<Category> newlist) { this.notifyDataSetChanged(); } } }
android android-fragments gridview adapter baseadapter
1个回答
0
投票
尝试一下:

public View getView(int position, View convertView, ViewGroup parent) { View gridView; if (convertView == null) { gridView = new View(context); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); gridView = inflater.inflate(R.layout.dashboard_category_item, null); } else { gridView = (View) convertView; } TextView nameView = (TextView) gridView.findViewById(R.id.category_name); ImageView imageView = (ImageView) gridView.findViewById(R.id.grid_item_image); TextView amountView = (TextView) gridView.findViewById(R.id.category_amount); nameView.setText(categories.get(position).getName()); imageView.setImageResource(categories.get(position).getIconId()); if (categories.get(position).getAmount() >= 0) { amountView.setText("$" + categories.get(position).getAmount()); } else { amountView.setText(""); } return gridView; }

© www.soinside.com 2019 - 2024. All rights reserved.