簡體   English   中英

Android ListView獲取按鈕行單擊

[英]Android ListView Get row on button click

我有一個用於列表視圖的自定義適配器類,我希望能夠通過單擊特定行的按鈕來訪問特定行的內容。 我試圖創建一個ViewHolder,但是當我嘗試單擊它時出現NPE錯誤。

static class ViewHolder {
    TextView camera;
    TextView players;
    TextView max_players;
    ImageView privata;
    Button Buton;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    String variabile[] = getItem(position).split("\\s+");
    LayoutInflater linflater = LayoutInflater.from(getContext());
        View customView = linflater.inflate(R.layout.custom_row, parent, false);
        final ViewHolder holder = new ViewHolder();
        holder.camera = (TextView) customView.findViewById(R.id.Nume);
        holder.players = (TextView) customView.findViewById(R.id.players);
        holder.max_players = (TextView) customView.findViewById(R.id.max_players);
        holder.privata = (ImageView) customView.findViewById(R.id.privata);
        holder.Buton = (Button) customView.findViewById(R.id.Buton);
        holder.camera.setText(variabile[0]);
        if (!variabile[1].equals("true")) {
            parola = false;
            holder.privata.setVisibility(View.INVISIBLE);
        }
        holder.players.setText(variabile[2]);
        holder.max_players.setText(variabile[3]);
        room_id = variabile[4];
        nume = variabile[5];
        holder.Buton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                hash = new HashMap<String, String>();
                hash.put("name", nume);
                hash.put("room", room_id);
                if (intra) {
                    holder.Buton.setText("Iesi");
                    site = siteul + "/join";
                    intra = false;
                } else {
                    holder.Buton.setText("Intra");
                    site = siteul + "/leave";
                    intra = true;
                }
                new ATask().execute(site);
            }
        });
    return customView;
}

您需要檢查convertView是否為null,以便已經被訪問過,然后將其保存在標簽Like中。

    ViewHolder holder;
    if (convertView == null) {
        LayoutInflater linflater = LayoutInflater.from(getContext());
        holder = linflater.inflate(R.layout.custom_row, parent, false);....
        convertView.setTag(holder);
    }else{
      holder = (ViewHolder) convertView.getTag();
    }//Common code

使用ViewHolder模式時,應檢查是否在null之前創建了convertView,或者是否已經在getView方法中,之前以及之后使用setTaggetTag方法創建了convertView。 像這樣 :

    if (convertView == null) 
    {
        LayoutInflater linflater = LayoutInflater.from(getContext());
        convertView = linflater.inflate(R.layout.your_list_item_view, parent, false);
         viewHolder.textView = (TextView)convertView.findViewById([the id]);
         .
         .
         .

        convertView.setTag(holder);
    }
    else
    {
      holder = (ViewHolder) convertView.getTag();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM