2013-05-10 110 views
0

我開發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

回答

0

您可以使用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

0

據我瞭解你的問題,我認爲你正在嘗試更新列表項的數據根據​​用戶在提示框中的選擇。如果是,則更改適配器中的基礎數據。不要嘗試在適配器之外更新您的textview。只是嘗試更新數據,然後在適配器上調用notifyDataSetChanged()方法。而已。

+0

如何試着更新數據? – crickpatel0024 2013-05-10 09:51:47

相關問題