0

私は、(主なアクティビティから到達した)アクティビティに対してListViewを設定するためにカスタムアダプタを使用しています。私は定義されたレイアウトファイル(ListViewの各行のためのレイアウト)を使用していないと考えて、ボタン(および後でEditText)を動的に追加しようとしています。それが機能するように見えない(最後の5行)。ここに私の活動コードは次のとおりです。Android ListViewカスタムアダプタボタンを動的に追加しますか?

public class SubSelectActivity extends ListActivity { 
private List<Subs> list; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ArrayAdapter<Subs> adapter = new DialogAdapter(this, list); 
    setListAdapter(adapter); 
    getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(SubSelectActivity.this, "TEST", Toast.LENGTH_SHORT).show(); 
      CheckBox checkBox = (CheckBox) view.findViewById(R.id.check); 
      checkBox.toggle(); 
      if (checkBox.isChecked()) { 
       imageTF.add(images.get(position)); 
      } else { 
       imageTF.remove(images.get(position)); 
      } 

     } 
    }); 

    Button myButton = new Button(this); 
    myButton.setText("Push Me"); 
    LinearLayout ll = new LinearLayout(this); 
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    ll.addView(myButton, lp); 
} 

そしてここでは、私のアダプタが設定されている:

public class DialogAdapter extends ArrayAdapter<SubSelectActivity.Subs> { 
private final List<SubSelectActivity.Subs> list; 
private final Activity context; 

static class ViewHolder { 
    protected TextView name; 
    protected CheckBox checkBox; 
} 

public DialogAdapter(Activity context, List<SubSelectActivity.Subs> list) { 
    super(context, R.layout.row, list); 
    this.context = context; 
    this.list = list; 
} 

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

    View view = null; 
    // reuse views 
    if (convertView == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     view = inflater.inflate(R.layout.row, null); 
     // configure view holder 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.name = (TextView) view.findViewById(R.id.text1); 
     viewHolder.checkBox = (CheckBox) view.findViewById(R.id.check); 
     view.setTag(viewHolder); 
    } else { 
     view = convertView; 
    } 

    final ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.name.setText(list.get(position).getName()); 
    holder.checkBox.setChecked(list.get(position).IsChecked()); 
    return view; 
    } 
} 

を誰も私が私のListView以下のウィジェットを追加する方法を見つけ出す手助けすることはできますか?

EDIT:私のrow.xmlはタイプCheckableRelativeLayoutは次のとおりです。

public class CheckableRelativeLayout extends RelativeLayout implements 
    Checkable { 

private boolean isChecked; 
private List<Checkable> checkableViews; 

public CheckableRelativeLayout(Context context, AttributeSet attrs, 
           int defStyle) { 
    super(context, attrs, defStyle); 
    initialise(attrs); 
} 

public CheckableRelativeLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initialise(attrs); 
} 

public CheckableRelativeLayout(Context context, int checkableId) { 
    super(context); 
    initialise(null); 
} 

/* 
    * @see android.widget.Checkable#isChecked() 
    */ 
public boolean isChecked() { 
    return isChecked; 
} 

/* 
    * @see android.widget.Checkable#setChecked(boolean) 
    */ 
public void setChecked(boolean checked) { 
    if (isChecked != checked) { 
     isChecked = checked; 
     refreshDrawableState(); 
    } 
} 

/* 
    * @see android.widget.Checkable#toggle() 
    */ 
public void toggle() { 
    this.isChecked = !this.isChecked; 
    for (Checkable c : checkableViews) { 
     c.toggle(); 
    } 
} 

@Override 
protected void onFinishInflate() { 
    super.onFinishInflate(); 

    final int childCount = this.getChildCount(); 
    for (int i = 0; i < childCount; ++i) { 
     findCheckableChildren(this.getChildAt(i)); 
    } 
} 

/** 
* Read the custom XML attributes 
*/ 
private void initialise(AttributeSet attrs) { 
    this.isChecked = false; 
    this.checkableViews = new ArrayList<Checkable>(5); 
} 

/** 
* Add to our checkable list all the children of the view that implement the 
* interface Checkable 
*/ 
private void findCheckableChildren(View v) { 
    if (v instanceof Checkable) { 
     this.checkableViews.add((Checkable) v); 
    } 

    if (v instanceof ViewGroup) { 
     final ViewGroup vg = (ViewGroup) v; 
     final int childCount = vg.getChildCount(); 
     for (int i = 0; i < childCount; ++i) { 
      findCheckableChildren(vg.getChildAt(i)); 
     } 
    } 
} 
} 

SOLUTION:

このリンクは、私が個人的に考える私のためAdd buttons to a listactivity

+0

あなたは 'ListActivity'を使用していますか? – Apoorv

+0

@Apoorvはい申し訳ありませんが、私のフォーマットはうんざりしていて、クラスのトップを追加しませんでした。はい、私はListActivityを使用しています。 – blurbs78

+0

@Apoorvうん、解決策を見つけた。 ListActivityは私がルックアップする必要があったものでした。ヒントをありがとう。元の投稿を編集しました。 – blurbs78

答えて

0
//I **** xml 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 

      convertView = new LinearLayout(context); 

      TextView tv = new TextView(context); 
      tv.setText(list.get(position).getName()); 

      CheckBox ch =new CheckBox(context); 
      ch.setChecked(list.get(position).IsChecked());  

      ((LinearLayout)convertView).addView(tv); 
      ((LinearLayout)convertView).addView(ch); 
     } 
     return convertView ; 
    } 
+0

"list"は単なるList <>です。その上でaddViewを実行することはできません。私はListViewの各行に、画面の下部にあるListViewのすぐ下にボタンを置くことを考えていません。 – blurbs78

+0

私は間違ったことを理解しているように見えます、私は私の答えを編集します。 –

+0

Viewholderは、textViewとcheckBox(アダプタコードの一番上を参照)を保持するクラスでした。 row.xmlレイアウトタイプのコードを追加しました。 (viewとCheckableRelativeLayout) – blurbs78

0

を働いたソリューションでしたあなたは、ListViewのためのXmlレイアウトを使用する必要があります、あなたはボタンを追加することができますEditText隠し(visibili ty = "GONE")、必要なときに表示します。

BUT、 私の個人的な経験や他の投稿から、ListViewでEditTextを使用することはお勧めしません。EditTextはフォーカスを保持できないため、ListViewに表示されたときにテキストは編集できません。

私は、LinearLayoutを使用してカスタムビューを動的に追加することをお勧めします。これはもう少し作業が必要ですが、問題は少なくなります。

関連する問題