GridView按钮,其中只有一个正在工作

时间:2017-04-05 21:43:25

标签: android gridview

我的GridView和gridview中的按钮有问题。这个想法是,用户点击网格的每个“项目”内的按钮,并弹出一个对话框,其中包含与该网格相关的文本(已经在textView中,但可见性设置为隐藏“。)

只有GridView内的第一个按钮才能正常工作,其余的只是“角色”。

这是 MyAdapter.java

public class MyAdapter extends BaseAdapter {
Context context;
ArrayList<Players> playerList;
private static LayoutInflater inflater = null;
Button btnRoleReveal;

public MyAdapter(Context context, ArrayList<Players> playerList){
    this.context = context;
    this.playerList = playerList;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}


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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null)
        convertView = inflater.inflate(layout_grid_item, null);


    final Button button = (Button) convertView.findViewById(R.id.btnRoleReveal);
    TextView idTextView = (TextView) convertView.findViewById(R.id.tv_player_id);
    TextView nameTextView = (TextView) convertView.findViewById(R.id.tv_player_name);
    final TextView roleTextView = (TextView) convertView.findViewById(R.id.tv_player_role);

    final String role = roleTextView.getText().toString();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new AlertDialog.Builder(context)
                    .setTitle("Test")
                    .setMessage(role)
                    .show();
        }
    });


    Players p = new Players();
    p = playerList.get(position);
    idTextView.setText("ID: " + String.valueOf(p.getId()));
    nameTextView.setText("Name: " + String.valueOf(p.getName()));
    roleTextView.setText("Role: " + String.valueOf(p.getRole()));

    return convertView;
}


}

我已经读过我可能需要以编程方式添加按钮,但我不知道如何处理这个问题。如果您需要查看任何其他代码或有任何建议,请告诉我们。

谢谢

1 个答案:

答案 0 :(得分:0)

确保以下行符合您的要求。我怀疑这是因为1)数据来自刚创建的视图,或者2)数据是从转换后的视图中获取的,数据是什么?无论role将来如何变化,您的对话框都将反映TextView的所有内容。

 final TextView roleTextView = (TextView) convertView.findViewById(R.id.tv_player_role);

另外,请查看其余代码。此行无效,因为您立即替换p

Players p = new Players();

是否要在此处设置其他值,或者是否要在button.setOnClickListener()之前设置它们,以便role设置为对话框所需的值?您可能需要考虑将这些内容移至getView()的开头。

p = playerList.get(position);
idTextView.setText("ID: " + String.valueOf(p.getId()));
nameTextView.setText("Name: " + String.valueOf(p.getName()));
roleTextView.setText("Role: " + String.valueOf(p.getRole()));

我希望这会有所帮助。 (顺便说一句,你不需要以编程方式添加按钮。)