[英]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.