2017-04-05 24 views
0

我的GridView和GridView中的按鈕有問題。這個想法是,人點擊網格中每個「項目」內的按鈕,彈出一個對話框,其中包含與該網格相關的文本(其已經在textView中但可見性設置爲隱藏「)。GridView按鈕,只有其中一個工作

只有在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; 
} 


} 

我已閱讀,我可能需要以編程方式,但我添加按鈕我不知道如何解決這個問題。如果您需要查看任何附加代碼或者有任何建議,請聯繫我們放心讓我知道。

謝謝

回答

0

請確保以下行是給你想要的。我質疑這是因爲1)數據是從剛剛創建的視圖中獲取的,或者2)數據是從轉換後的視圖中獲取的,該數據會是什麼?無論TextView未來如何變化,您的對話框都將反映role在這一點上的任何內容。

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

另外,看看其餘的代碼。這條線是沒有用的,因爲你馬上更換p

Players p = new Players(); 

你想在這裏設置其他值,或者你想使role設置爲你想要的對話框價值button.setOnClickListener()之前設置呢?您可能需要考慮將這些移動到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())); 

我希望這有助於。 (順便說一句,你不需要編程添加按鈕。)