簡體   English   中英

在itemclick的自定義列表視圖中顯示隱藏文本視圖

[英]Show hide textview in custom listview on itemclick

我在自定義listview中有兩個textview。當我選擇一個列表項時,我希望對選定的行可見holder.text2,而當我選擇另一行時,我希望前一個holder.text2不可見並且新的選定位置行holder.text2變得可見。 我怎樣才能做到這一點?。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View row = convertView;
    ViewHolder holder;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();

        row = inflater.inflate(layoutResID, parent, false);
        holder = new ViewHolder();


        holder.text1 = (TextView) row.findViewById(R.id.text1);
        holder.text2 = (TextView) row.findViewById(R.id.text2);


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

    }

    Item item = items.get(position);

    holder.text1.setText(item.gettext());
    holder.text2.setText(item.getText2());

    return row;
}
public static class ViewHolder {

    TextView text1, text2;

}

當項目單擊時:

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

        ViewHolder holder= (ViewHolder) view.getTag();
        holder.text2.setVisibility(View.VISIBLE);

    }

我從未使用過ViewHolder holder= (ViewHolder) view.getTag(); ,不知道它是否有效。

這應該工作:

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

    TextView text1 = (TextView)view.findViewById(R.id.text1);
    TextView text2 = (TextView)view.findViewById(R.id.text2);

    if (text1.getVisibility() == View.VISIBLE) 
       text1.setVisibility(View.GONE); 
    else 
       text2.setVisibility(View.VISIBLE);

    }

在列表項持有者中添加一個布爾值falg,然后嘗試更改項目click中的flag狀態:

public class Item {

private String text1;
private String text2;
private boolean isSelected;

public String getText1() {
    return text1;
}

public void setText1(String text1) {
    this.text1 = text1;
}

public String getText2() {
    return text2;
}

public void setText2(String text2) {
    this.text2 = text2;
}

public boolean isSelected() {
    return isSelected;
}

public void setSelected(boolean isSelected) {
    this.isSelected = isSelected;
}

}

現在嘗試更改項目click上的標志狀態:

ArrayList listItems;

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
    for (Item item :listItems){
        item.setSelected(false);
    }
    listItems.get(position).setSelected(true);
    adapter.notifyDataSetChanged();
}

顯示/隱藏text2基本項目選擇標志值:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();

        convertView = LayoutInflater.from(context).inflate(layoutResID, parent, false);
        holder.text1 = (TextView) convertView.findViewById(R.id.text1);
        holder.text2 = (TextView) convertView.findViewById(R.id.text2);

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

    holder.text1.setText(items.get(position).getText1());
    holder.text2.setText(ititems.get(position)getText2());
    if(items.get(position).isSelected()){
       holder.text2.setVisibility(View.VISIBLE)
    }else{
       holder.text2.setVisibility(View.GONE)
    }

    return convertView;
}

試試這個代碼...

if (holder.text2.getVisibility() == View.VISIBLE) {
    holder.text2.setVisibility(View.GONE); 
} else {
    holder.text2.setVisibility(View.VISIBLE);
}

嘗試這種方式。

row.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                SetVisible(position)
            }
        });

private void SetVisible(int pos){
        for(int i = 0; i < listview.getCount(); i++){
            View listitem = listview.getAdapter().getView(i, null, listview);
            Textview textview = (TextView) listitem.findViewById(R.id.text2);
            text2.setVisibility(View.GONE);
        }
        View view = listview.getAdapter().getView(pos, null, listview);
        Textview text2 = (TextView) view.findViewById(R.id.text2);

        text2.setVisibility(View.VISIBLE);
    }

嘗試這個。

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

        ViewHolder holder= (ViewHolder) view.getTag();
           if(position=firstrowposition){
            holder.text2.setVisibility(View.VISIBLE);
            holder.text1.setVisibility(View.INVISIBLE);
          }
       else if(position=anotherrowposition){
            holder.text1.setVisibility(View.VISIBLE);
            holder.text2.setVisibility(View.INVISIBLE);
       }
       else{
          //your desired states
       }


    }

暫無
暫無

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

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