2011-10-25 15 views
1

私の目的は、チェックボックスが有効になっているときにリスト項目をリストの最後にプッシュすることです。私のリストアイテムはオブジェクト "タスク"です。Android - リストビューにオブジェクトを動的に追加する

ListView lv=this.getListView(); 
int size=lv.getCount(); 
Myarrayadapter adapter = new Myarrayadapter(this,getTasks()); 
lv.setAdapter(adapter); 
lv.invalidateViews(); 


private List<Task> getTasks() { 
List<Task> list = new ArrayList<Task>(); 
for(int k=0;k<taskname.length;k++)//taskname is an array of tasknames 
{ 
list.add(new Task(taskname[k],status[k])); 
    return list; 
} 

目的は、チェックボックスは、はい、いくつかの変更(テキストの色やボタンテキスト)を作成し、最後の位置に、この変更されたビューを移動enabled.Ifであるかどうかを確認することですbelow.my Myarrayadapterクラスが示されています。

public class Myarrayadapter extends ArrayAdapter<Task> { 
private final Activity context; 
private final List<Task> list; 

public Myarrayadapter(Activity context, List<Task> list) { 
super(context, R.layout.list_item, list); 
this.context = context; 
this.list=list; 
} 

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

LayoutInflater inflater = context.getLayoutInflater(); 
View rowView = inflater.inflate(R.layout.list_item, null, true); 
final TextView text = (TextView) rowView.findViewById(R.id.label); 
CheckBox checkbox = (CheckBox) rowView.findViewById(R.id.cb); 
final Button btnChild = (Button) rowView.findViewById(R.id.directions); 
text.setText(list.get(position).getName()); 
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 
       if(isChecked) 
       { 
        text.setTextColor(Color.parseColor("#468765")); 
        btnChild.setText("Revert"); 
        Task taskItem= list.get(position); 
        list.remove(position); 
        list.add(taskItem); 

       } 
     }}); 

    return rowView; 
} 

私は欲しかった正確なリストアイテムを動かしていません。

ありがとうございました!!!!

答えて

1

をいくつかのメソッドをオーバーライドする必要があります

list.remove(position); 
list.add(taskItem); 
notifyDataSetChanged(); // add this line after adding task again at last position 
+0

それは失敗します。その他のソリューション – siraj

+2

@siraj: 'notifyDataSetChanged();'はAdapterに属しているので、 'notifyDataSetChanged();'(変数または 'Myarrayadapter.this.notifyDataSetChanged();'を使用しないでください) –

+0

@AdilSoomro yes adil私は彼がnotifyDataSetChanged()を呼び出す必要があると思うので、アダプタ自体でnotifyDataSetChanged()の呼び出しをする必要があるので、右かもしれません –

0

あなたはリストビューを更新するためにnotifyDataSetChanged()を呼び出す必要があり、あなたのArrayAdapterに

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

@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 
+0

#R4j:うまく動作しませんでした。私を助けてください。 – siraj

1

は(あなたの全体のアダプターを書きますが、あなたはなかったこれを試してみてください交換する必要がある部分を参照してください):

 View v = convertView; 

     if(v == null){ 
      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_item, null); 
     } 

     final Task task = getItem(position); 
     if(isChecked) 
     { 
       text.setTextColor(Color.parseColor("#468765")); 
       btnChild.setText("Revert"); 
       list.remove(task); 
       list.add(task); 
       notifyDataSetChanged(); 
     } 
     return v; 

ボタンの新しい変更を取得するにはタスクのカラーをsetColor()とsetText()をTask.classで作成し、それを削除した後にsetColor()とsetText()を作成し、それを追加してif else文をmakeで作成する必要があります(getColor )とgetText())を使用して、タスクの色とテキストを確認します。

関連する問題