【问题标题】:textview not visible in listview when a button is clicked on a particular row当在特定行上单击按钮时,文本视图在列表视图中不可见
【发布时间】:2017-10-13 05:39:11
【问题描述】:

我有一个自定义的listview,其中包含buttontextviewtextview 可见性消失了。当button 文本为“电子邮件”时,如果我单击buttontextview 应显示在button 下方。但最后一个textview 总是可见。

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {

    wantedUsers du = wusers.get(i);

    final String mcontact = du.mcontact;

    if(view==null) {
        viewholder = new viewholder();
        view = LayoutInflater.from(ws).inflate(R.layout.wantedmoviecustom, null);
         viewholder.mcontwcustom = (Button)view.findViewById(R.id.mcontwcustom);

        viewholder.mdisplayemail = (TextView) view.findViewById(R.id.mdisplayemail);
        view.setTag(viewholder);
    } else {
        viewholder = (viewholder) view.getTag();
    }

    viewholder.mdisplayemail.setVisibility(View.GONE);

    if(mcontact.contains("@")) {
        viewholder.mcontwcustom.setText("Show Email");
        viewholder.mdisplayemail.setText(mcontact);
    } else {
        viewholder.mcontwcustom.setText("Call");
    }

    viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(mcontact.contains("@")) {
                int p=(Integer)view.getTag();

                viewholder.mdisplayemail.setVisibility(View.VISIBLE);
               // viewholder.mdisplayemail.setText(mcontact);

            }
            else
            {
                Uri call = Uri.parse("tel:" + mcontact);
                Intent surf = new Intent(Intent.ACTION_DIAL, call);
                ws.startActivity(surf);
            }
        }
    });
    viewholder.mcontwcustom.setTag(i);
    return view;
} 

下面是我的getview 来自自定义adapter。那么,当button 单击特定行时,我该如何创建textview visbile

【问题讨论】:

  • 你需要把viewholder.mdisplayemail.setVisibility();改成viewholder.mdisplayemail.setVisibility(View.VISIBLE);
  • 给我看看你的布局?
  • @user2269164 检查我的回答可能会解决您的问题

标签: android listview android-arrayadapter android-adapter


【解决方案1】:

首先,你需要创建一个全局变量

int positionOfButtonClick = -1;

那么你需要在button点击更新你的位置并且需要打电话给notifyDataSetChanged();

喜欢 - :

 viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       positionOfButtonClick = i;  
       notifyDataSetChanged();
     //your other code    
});

然后,在 getView

你需要查看位置并且需要VISIBLE你的textViewlike-:

if(i==positionOfButtonClick ){
viewholder.mdisplayemail.setVisibility(View.VISIBLE);
}

现在,您的 getView 应该是:

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {

wantedUsers du = wusers.get(i);

final String mcontact = du.mcontact;



if(view==null) {
    viewholder = new viewholder();
    view = LayoutInflater.from(ws).inflate(R.layout.wantedmoviecustom, null);
     viewholder.mcontwcustom = (Button)view.findViewById(R.id.mcontwcustom);

    viewholder.mdisplayemail = (TextView) view.findViewById(R.id.mdisplayemail);


if(i==positionOfButtonClick ){
viewholder.mdisplayemail.setVisibility(View.VISIBLE);
}else{
    viewholder.mdisplayemail.setVisibility(View.GONE);
  }


    view.setTag(viewholder);
} else {
    viewholder = (viewholder) view.getTag();
}



if(mcontact.contains("@")) {
    viewholder.mcontwcustom.setText("Show Email");
    viewholder.mdisplayemail.setText(mcontact);
} else {
    viewholder.mcontwcustom.setText("Call");
}

viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        if(mcontact.contains("@")) {
            int p=(Integer)view.getTag();



       positionOfButtonClick = i;  
       notifyDataSetChanged();

        }
        else
        {
            Uri call = Uri.parse("tel:" + mcontact);
            Intent surf = new Intent(Intent.ACTION_DIAL, call);
            ws.startActivity(surf);
        }
    }
});
viewholder.mcontwcustom.setTag(i);
return view;
}

【讨论】:

  • @user2269164 试试这个会有帮助
【解决方案2】:

如下所述更改代码,我认为它对您有所帮助。

viewholder.mcontwcustom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(mcontact.contains("@")) {
                int p=(Integer)view.getTag();

               viewholder.mdisplayemail.setVisibility(View.VISIBLE);
               // viewholder.mdisplayemail.setText(mcontact);

            }

【讨论】:

  • @UltimateDevil - 它将启用最后一行的文本视图。不是我点击的那个。
  • 是的,等我更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
相关资源
最近更新 更多