从RecyclerView检索数据

时间:2018-11-05 12:10:40

标签: android android-recyclerview get adapter

我使用自定义适配器在应用程序中使用RecyclerView。 我想处理现有的菜单RecyclerView项目。像普通变量一样访问它们,以便我可以应用特定条件或以文本消息的形式在类适配器之外发送它们。

如何访问RecyclerView个项目?

代码类矩阵:

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        super.onCreate(savedInstanceState);

        addItem();

        Button button = findViewById(R.id.get_item);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                    I want when I press the button
                    The items are called
                 */
            }
        });

    }

    public void addItem() {

        List<Shops> shops = new ArrayList<>();
        String[] cloth = {"Silk", "Cotton", "Linen"};
        String[] wood = {"Sandal", "Jawi", "Pine"};
        String[] metal = {"Window", "door", "roof"};

        RecyclerView recyclerView = findViewById(R.id.list_shop);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        for (int i = 0; i < cloth.length; i++) {

            Shops shopsList = new Shops(cloth[i], wood[i], metal[i]);

            shops.add(shopsList);
        }

        ShopsAdapter adapter = new ShopsAdapter(shops);
        recyclerView.setAdapter(adapter);
    }
}

代码类别列表

public class Shops {
    String cloth, wood, metal;

    public Shops(String cloth, String wood, String metal) {
        this.cloth = cloth;
        this.wood = wood;
        this.metal = metal;
    }
}

代码类适配器

public class ShopsAdapter extends RecyclerView.Adapter<ShopsAdapter.ShopsHolder> {

    private List<Shops> shopsList;

    public ShopsAdapter(List<Shops> shops) {
        this.shopsList = shops;
    }

    @Override
    public ShopsHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View row = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.template_recycler_view, viewGroup, false);
        ShopsHolder holder = new ShopsHolder(row);
        return holder;
    }

    @Override
    public void onBindViewHolder(ShopsHolder holder, int i) {

        Shops shops = shopsList.get(i);
        holder.cloth.setText(shops.cloth);
        holder.wood.setText(shops.wood);
        holder.metal.setText(shops.metal);

    }

    @Override
    public int getItemCount() {
        return shopsList.size();
    }

    class ShopsHolder extends RecyclerView.ViewHolder {
        private TextView cloth, wood, metal;

        public ShopsHolder(View itemView) {
            super(itemView);
            cloth = itemView.findViewById(R.id.cloth);
            wood = itemView.findViewById(R.id.wood);
            metal = itemView.findViewById(R.id.metal);
        }
    }
}

如果您需要XML代码,我会在另一封信中放它。

4 个答案:

答案 0 :(得分:1)

您的代码方式似乎可以满足您的需求,但是我认为这不是一种很好的方式。与其在项目的某些地方创建公共列表以缓存所需的数据,不如使该列表在适配器中变为私有,并通过添加一个getItem(int pos)来返回想要的数据,从而通过适配器获取所需的数据。通过传递给它的“ pos”参数,它更安全,更专业。解决问题的方法有很多,但这是最好的...

答案 1 :(得分:0)

在该主题-textRect(forBounds:limitedToNumberOfLines:)上通过 pRaNaY 检查答案。 我认为这就是您要寻找的。

答案 2 :(得分:0)

谢谢。 经过反复实验。 我能够取得结果。 它用于For loob 在你里面addItem 所以

  public void addItem() {

        String[] cloth = {"Silk", "Cotton", "Linen"};
        String[] wood = {"Sandal", "Jawi", "Pine"};
        String[] metal = {"Window", "door", "roof"};

        RecyclerView recyclerView = findViewById(R.id.list_shop);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        for (int i = 0; i < cloth.length; i++) {

            Shops shopsList = new Shops(cloth[i], wood[i], metal[i]);

            shops.add(shopsList);

        }

        ShopsAdapter adapter = new ShopsAdapter(shops);
        recyclerView.setAdapter(adapter);

    // From here begins the solution code
        for (int i = 0; i < cloth.length; i++) {

            String clothMy = shops.get(i).cloth;
            String woodMy = shops.get(i).wood;
            String metalMy = shops.get(i).metal;

            Log.i("TAG",clothMy);
            Log.i("TAG",woodMy);
            Log.i("TAG",metalMy);

        }
    // Here ends the solution code

    }

答案 3 :(得分:0)

使用这样的getters()和setters()创建模型/ POJO类

public class Shops {

    private String cloth;
    private String wood;
    private String metal;

    public Shops(String cloth, String wood, String metal) {
        this.cloth = cloth;
        this.wood = wood;
        this.metal = metal;
    }

    public String getCloth() {
        return cloth;
    }

    public void setCloth(String cloth) {
        this.cloth = cloth;
    }

    public String getWood() {
        return wood;
    }

    public void setWood(String wood) {
        this.wood = wood;
    }

    public String getMetal() {
        return metal;
    }

    public void setMetal(String metal) {
        this.metal = metal;
    }
}

现在全局声明ArrayList并向其中添加项目。当您单击按钮时,可以使用索引号简单地访问它们。您可以为此运行一个for循环。

public class MainActivity extends AppCompatActivity {

private  List<Shops> shops;

protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_main);
    super.onCreate(savedInstanceState);
    shops= new ArrayList<>();
    addItem();

    Button button = findViewById(R.id.get_item);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            /*
                I want when I press the button
                The items are called
             */
            shops.get(1).getCloth();
            shops.get(1).getWood();
            shops.get(1).getMetal();

            // do whatever you want with them

        }
    });

}

public void addItem() {


    String[] cloth = {"Silk", "Cotton", "Linen"};
    String[] wood = {"Sandal", "Jawi", "Pine"};
    String[] metal = {"Window", "door", "roof"};

    RecyclerView recyclerView = findViewById(R.id.list_shop);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    for (int i = 0; i < cloth.length; i++) {

        Shops shopsList = new Shops(cloth[i], wood[i], metal[i]);

        shops.add(shopsList);
    }