如何在textview中的listview行更改android中的文本?

如何在textview中的listview行更改android中的文本?

问题描述:

我开发listview在自定义行created.but我使用列表按钮单击打开警报对话框和选定的单选按钮,然后对话框关闭,我打电话更新功能,但如何更改行文本。我的代码是below.please给我的解决方案并保存状态全部行。如何在textview中的listview行更改android中的文本?

public class AlMessagesAdapter extends ArrayAdapter<DtoAllMessages> { 

     private LayoutInflater inflator; 
     private ArrayList<DtoAllMessages> userlist; 

     public AlMessagesAdapter(Activity context, 
       ArrayList<DtoAllMessages> list) { 
      super(context, R.layout.custom_list, list); 

      this.userlist = list; 
      inflator = context.getLayoutInflater(); 
     } 

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

      ViewHolder holder = null; 
      if (convertView == null) { 
       convertView = inflator.inflate(R.layout.custom_list, null); 
       holder = new ViewHolder(); 
       holder.title = (TextView) convertView.findViewById(R.id.tvName); 
       holder.date_cr = (TextView) convertView 
         .findViewById(R.id.tvDate); 
       holder.img = (ImageView) convertView.findViewById(R.id.ivIcon); 
       holder.tokenBtn = (TextView) convertView 
         .findViewById(R.id.tokenBtn); 
       convertView.setTag(holder); 
       convertView.setTag(R.id.tvName, holder.title); 
       convertView.setTag(R.id.tvDate, holder.date_cr); 
       convertView.setTag(R.id.ivIcon, holder.img); 
       convertView.setTag(R.id.tokenBtn, holder.tokenBtn); 

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

      token = userlist.get(position).getToken(); 


      token = token.substring(0, token.length() - 3); 

      holder.title.setText(userlist.get(position).getName() + "(" + token 
        + ")"); 

      String type_data = userlist.get(position).getType().toString(); 

      if ((type_data.equals("text")) || (type_data.equals("photo"))) { 
       holder.date_cr.setText(userlist.get(position).getType() 
         + ":Received " 
         + userlist.get(position).getCreated_date()); 
       holder.tokenBtn.setVisibility(View.VISIBLE); 
       list.setItemsCanFocus(true); 
      } else if (type_data.equals("out")) { 
       holder.date_cr.setText(userlist.get(position).getType() 
         + ":Sent " + userlist.get(position).getCreated_date()); 
       holder.tokenBtn.setVisibility(View.GONE); 
      } 

      if (type_data.equals("text")) { 
       holder.img.setBackgroundResource(R.drawable.chatmessage); 

      } else if (type_data.equals("photo")) { 
       holder.img.setBackgroundResource(R.drawable.photomessage); 

      } else if (type_data.equals("out")) { 

       holder.img.setBackgroundResource(R.drawable.outmessafe); 
      } 

      if (position % 2 == 0) { 
       convertView.setBackgroundResource(R.drawable.whitebackground); 
      } else { 
       convertView.setBackgroundResource(R.drawable.greybackground); 
      } 

      holder.tokenBtn.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        AlertBoxShow(position); 
       } 
      }); 

      return convertView; 
     } 

     class ViewHolder { 
      protected ImageView img; 
      protected TextView date_cr; 
      protected TextView title; 
      protected TextView tokenBtn; 
     } 
    } 

和holder.tokenButton然后双击打开下面的alertdialog箱incode ::

public void AlertBoxShow(int position) { 
     final int pos=position; 
     Log.v("log_tag"," position ::"+pos); 
     final CharSequence[] items = { " 5 ", " 10 ", " 15 "}; 

     AlertDialog.Builder alt_bld = new AlertDialog.Builder(this); 
     alt_bld.setSingleChoiceItems(items, -1, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         switch (which) { 
         case 0: 
          updateStatus(pos,5); 
          dialog.dismiss(); 
          // Your code when first option seletced 
          break; 
         case 1: 
          updateStatus(pos,10); 
          // Your code when 2nd option seletced 
          dialog.dismiss(); 
          break; 
         case 2: 
          updateStatus(pos,15); 
          dialog.dismiss(); 
          // Your code when 3rd option seletced 
          break; 
         } 

        } 

       }); 
     AlertDialog alert = alt_bld.create(); 
     alert.show(); 
    } 

,并呼吁updatestatus功能我想holder.title的setText,然后刷新列表行如何possible.and我的更新状态功能在下面。

private void updateStatus(int index, int radioSelectValue) { 

     holder.title.setText(userlist.get(index).getName() + "(" + token 
       + ")"); 


    } 
+0

你有没有试过检查你的列表位置是否正确?尝试向下滚动并再次检查位置......这也可能是因为在列表视图 – Cjames 2013-05-10 08:33:37

+0

ya正确重用poaition得到它。 – crickpatel0024 2013-05-10 08:45:40

您可以使用setTag()getTag()让行项目点击的位置,

下面是setTag()

convertView.setTag(R.id.tokenBtn, postion); 

然后getTag()holder.tokenBtnonClick()

int pos = (Integer)v.getTag(R.id.tokenBtn); 
TextView txtview = (TextView)v.getTag(R.id.tvName); // use this TextView 
                  to update the value. 
AlertBoxShow(pos); 
+0

感谢您的回复,但updateStatus功能如何设置holder.title。 – crickpatel0024 2013-05-10 07:53:10

+0

更新了我的答案。 – 2013-05-10 08:00:43

+0

int pos =(Integer)v.getTag(R.id.tokenBtn);我在onclick事件中使用这一行,然后崩溃的应用程序和错误获取空指针异常。 – crickpatel0024 2013-05-10 08:06:44

据我了解你的问题,我认为你正在尝试更新列表项的数据根据​​用户在提示框中的选择。如果是,则更改适配器中的基础数据。不要尝试在适配器之外更新您的textview。只是尝试更新数据,然后在适配器上调用notifyDataSetChanged()方法。而已。

+0

如何试着更新数据? – crickpatel0024 2013-05-10 09:51:47