2016-05-05 3 views
0
public class ItemMemberAdapter extends BaseAdapter{ 

     ArrayList<Item> objects; 
     Context context; 
     Item itm; 
     MyHolder holder; 
     //timer 
     long starttime = 0L; 
     long timeInMilliseconds = 0L; 
     long timeSwapBuff = 0L; 
     long updatedtime = 0L; 
     int t = 1; 
     int secs = 0; 
     int mins = 0; 
     int milliseconds = 0; 
     Handler handler = new Handler(); 
     //timer 

     public ItemMemberAdapter(Context context, ArrayList<Item> objects) { 
      this.context=context; 
      this.objects=objects; 
     } 

     @Override 
     public int getCount() { 
      return objects.size(); 
     } 

     @Override 
     public Item getItem(int position) { 
      return objects.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 
     class MyHolder{ 
      TextView m_time,l_time,name; 
      Button s_btn,l_btn; 
     } 

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

      if(v==null) { 
       LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
       v=inflater.inflate(R.layout.item_member_list_app,null); 
       holder=new MyHolder();   
       holder.m_time= (TextView)v.findViewById(R.id.textView4); 
       holder.l_time= (TextView) v.findViewById(R.id.lap_time); 
       holder.name= (TextView) v.findViewById(R.id.textView5); 
       holder.s_btn=(Button)v.findViewById(R.id.strt_btn); 
       holder.l_btn=(Button)v.findViewById(R.id.lap_btn); 

       v.setTag(holder); 
      }else { 
       holder= (MyHolder) v.getTag(); 
      } 
      itm=null; 
      itm=getItem(position); 
      final String nm = itm.getMember_name(); 
      final String t = itm.getTimerOne(); 

      holder.name.setText(nm); 
      holder.m_time.setText(t); 
      final Runnable updateTimer = new Runnable() { 

       public void run() { 

        timeInMilliseconds = SystemClock.uptimeMillis() - starttime; 

        updatedtime = timeSwapBuff + timeInMilliseconds; 

        secs = (int) (updatedtime/1000); 
        mins = secs/60; 
        secs = secs % 60; 
        milliseconds = (int) (updatedtime % 1000); 
        String stime="" + mins + ":" + String.format("%02d", secs) + ":" 
          + String.format("%03d", milliseconds); 
        Log.d("timea", stime); 
        holder.l_time.setText(stime); 
        handler.postDelayed(this, 0); 
       } 
      }; 
      holder.s_btn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Toast.makeText(context,"Name : "+nm+" Time : "+t,Toast.LENGTH_SHORT).show(); 
        starttime = SystemClock.uptimeMillis(); 
        handler.postDelayed(updateTimer, 0); 
       } 
      }); 

      return v; 
     } 

    } 

ではうまく機能していない、今の問題は、私は[スタート]ボタンをクリックしていたときにタイマーが起動していると私はログを参照することができますが、そのLOG値がTextViewの上に設定されていないということです...タイマーは、これは私のアダプタであるアダプタ

答えて

1

あなたのコードアーキテクチャは奇妙です。

  • 活動のRunnable

  • アダプタ内部の測定時間を実行し、 adapter.notifyDataSetChanged()

を使用してアレイ内のアダプタにデータを渡さないでくださいアダプタ

  • 外にあなたのボタンのonclickアクションを移動し

    アダプターは正しい方法でデータを収集し、表示するだけです。すべてのデータ操作はアダプターの外になければなりません。あなたのケースではUIスレッドで操作していないため、値を取得できません。しかし、それはUIスレッド上で最悪のアイデアで動作するように修正。上記の手順でコードにリファクタリングを行いました。

  • +0

    私は試みました...しかし、どのように配列のアダプタにデータを渡す.. ??????????? –

    +0

    ArrayAdapterを使用することも、setData()メソッドを使用してカスタムアダプターを作成することもできます。アダプタ内のデータセットを置き換えて、ビューをリフレッシュするだけです。 – Fiil

    +0

    これはリストビューのデータ全体を置き換えますが、単一のビューのみは何ですか? –

    関連する問題