【问题标题】:ListView Adapter issueListView 适配器问题
【发布时间】:2017-04-16 19:26:47
【问题描述】:
public class SearchRecipe extends AppCompatActivity {

 ArrayList<Recipe> lst=new ArrayList<Recipe>();
    private ListView listView;
    ProgressDialog pg;


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_recipe);
        pg = ProgressDialog.show(this, "Loading", "please wait", true);
        getDataBase3();
    }

    public void getDataBase3() {
        myFirebaseRef.child("Recipes").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Recipe recipe = snapshot.getValue(Recipe.class);
                    lst.add(recipe);
                }
                init();
            }
            @Override
            public void onCancelled(FirebaseError firebaseError) {
                Toast.makeText(SearchRecipe.this, "Failed", Toast.LENGTH_SHORT).show();
            }

        });
    }

    private void init() {
        listView= (ListView) findViewById(R.id.listview_searchRecipe);
        UsersAdapter adapter = new UsersAdapter(this, lst);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent=new Intent(SearchRecipe.this,ShowRecipe.class);
                intent.putExtra("recipeName",lst.get(position).getRecipeName());
                startActivity(intent);
                finish();
            }
        });
        pg.dismiss();
    }

    public class UsersAdapter extends ArrayAdapter<Recipe> {
        public UsersAdapter(android.content.Context context, ArrayList<Recipe> names) {
            super(context, 0, names);
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Recipe user = getItem(position);
            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.recipe_row_layout, parent, false);
                TextView tvname= (TextView) convertView.findViewById(R.id.recipeTV2_row);
                TextView tvlike= (TextView) convertView.findViewById(R.id.likes_row);
                TextView tvdislike= (TextView) convertView.findViewById(R.id.dislike_row);

                tvname.setText(user.getRecipeName());
                tvlike.setText(""+user.getLikes());
                tvdislike.setText(""+user.getDislikes());
            }
            return convertView;
        }

    }

第一个作品的填充 - 有价值观和正确的。 当列表到达大约位置 8 时,它开始替换 ListView 中的名称(如果列表中的数字 8 是“狗”而数字 1 是“猫”,它将显示数字 8 和数字 1 都是“猫”,但是当您单击 1 时,它会将其变为 1,当您单击 8 时,它将带您到正确的 8 !)

所以问题在于 ListView 的呈现方式 - 它显示了错误的值,当您点击它们时,它会将您带到正确的位置。

谢谢你们。

【问题讨论】:

    标签: android listview firebase firebase-realtime-database android-adapter


    【解决方案1】:

    ListView 已弃用,只需使用 RecyclerView,它更轻巧且更易于使用(如果您仍然遇到问题 - 然后发布)

    RecyclerView google 示例:https://developer.android.com/training/material/lists-cards.html

    可搜索和可扩展的recycerview示例(在对话框容器中,想法相同):https://github.com/WithoutCaps/DialogsCheatSheet

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多