2
public class ChallengesActivity extends ListActivity {

    private SimpleAdapter adapter;
    private ArrayList<HashMap<String,String>> list =  new ArrayList<HashMap<String,String>>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        printTripsToScreen(); 
        setContentView(R.layout.challenge_list);
        adapter = new SimpleAdapter(this, list, R.layout.challenge_row, 
                new String[] {"description","progress"},
                new int[] {R.id.ch_description, R.id.ch_progress});
        setListAdapter(adapter);
    }

    public void printTripsToScreen() {
           Log.d("Carbon","ChallengesActivity: printTripsToScreen() started");
           ChallengeManager chManager = new ChallengeManager();
           ArrayList<Challenge> challenges = chManager.getChallenges();
           HashMap<String,String> temp;

           for (int i=0; i<challenges.size();i++){
               temp = new HashMap<String,String>();
               temp.put("description","Hello");
               temp.put("progress", ""+challenges.get(i).getCompleted_percentage());
               list.add(temp);
           }
       }
}

進行状況バーの値を更新する必要があります。アダプターと HashMap を使用してテキスト コンテンツを更新しています。プログレスバーの値を更新するには? これが方法でない場合は、どうすればよいか教えてください。リストは動的です。

4

1 に答える 1

1

Progressbarの行に があり、ListViewその進行状況を (既に持っている値で) 更新したい場合は、 を使用してSimpleAdapter.ViewBinderその の値をバインドできますProgressBar。以下は、行をクリックしたときにProgressBar(その行から) をリセットする例です。0ListView

    //...
    //I assumed that you have a ProgressBar in the ListView row with the id progressBar1
    // and you use the the value from the "progress" key as its progress.
    adapter = new SimpleAdapter(this, list,
                    R.layout.someclasses_challaenge_row, new String[] {
                            "description", "progress", "progress"}, new int[] {
                            R.id.ch_description, R.id.ch_progress, R.id.progressBar1});
            adapter.setViewBinder(new SimpleAdapter.ViewBinder() {

                @Override
                public boolean setViewValue(View view, Object data,
                        String textRepresentation) {
                    if (view.getId() == R.id.progressBar1) {
                        int value = Integer.parseInt(data.toString());
                        ((ProgressBar) view).setProgress(value);
                        return true;
                    }
                    return false;
                }
            });
            setListAdapter(adapter);

    @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            HashMap<String, String> item = list.get(position);
            item.put("progress", "0");
            adapter.notifyDataSetChanged();
    }

これがあなたの望んだものかどうかはわかりません。

于 2012-05-21T10:40:26.213 に答える