-1

私は画像のようなカスタム項目と線形レイアウトがあります。アンドロイドの直線レイアウトからchildviewアイテムにアクセスする方法は?

enter image description here

Webサービスによって満たされ、どのように私はonclickoncheckedを実行するためにtextview「削除」のラジオボタンへのアクセスを獲得しますリスナー?

私のアクティビティは、Webサービスのデータの読み込みを開始し、Webサービスから取得するすべてのレスポンスのリニアレイアウト "n"チャイルドに入れます。子の位置に応じてクリックとチェックリスナーを有効にしたいリストビュー。

Thnx。

アダプター。

public class NewPaymentsAdapter extends ArrayAdapter<Payments> { 

    private ViewHolder holder; 

    public NewPaymentsAdapter(Context context, ArrayList<Payments> newpayments) { 
     super(context, 0, newpayments); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final Payments payments = getItem(position); 
     if (convertView == null){ 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.new_payments_item, parent, false); 
      holder = new ViewHolder(); 
      holder.rbPayments = (RadioButton) convertView.findViewById(R.id.rbPayments); 
      holder.tvPaymentsDelete = (MyTitleFontTextView) convertView.findViewById(R.id.tvPaymentsDelete); 
      holder.tvPaymentsTitle = (MyTitleFontTextView) convertView.findViewById(R.id.tvPaymentsTitle); 
      holder.tvPaymentsDesc = (MyFontTextView) convertView.findViewById(R.id.tvPaymentsDesc); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.tvPaymentsTitle.setText("Tarjeta"); 
     holder.tvPaymentsDesc.setText("**** **** **** " + payments.getLastfour()); 
     if (Boolean.parseBoolean(payments.getIsdefault()) == true){ 
      holder.rbPayments.setChecked(true); 
     } else { 
      holder.rbPayments.setChecked(false); 
     } 
     return convertView; 
    } 

    private class ViewHolder { 
     RadioButton rbPayments; 
     MyTitleFontTextView tvPaymentsDelete, tvPaymentsTitle; 
     MyFontTextView tvPaymentsDesc; 
    } 

パーサ

public ArrayList<Payments> parseNewPayments(String response, ArrayList<Payments> list) { 

     try { 
      JSONObject jsonObject = new JSONObject(response); 
      if (jsonObject.getBoolean(KEY_SUCCESS)) { 
       JSONArray jsonArray = jsonObject.getJSONArray("payments"); 
       if (jsonArray.length() > 0) { 
        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject object = jsonArray.getJSONObject(i); 

         Payments newpayments = new Payments(); 

         newpayments.setId(object.getInt("id")); 
         newpayments.setLastfour(object.getString("last_four")); 
         newpayments.setIsdefault(object.getString("is_default")); 
         list.add(newpayments); 
        } 
       } 

      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return list; 
    } 

モデル

public class Payments { 

    private int id; 
    private String isdefault, lastfour; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getLastfour() { 
     return lastfour; 
    } 

    public void setLastfour(String lastfour) { 
     this.lastfour = lastfour; 
    } 

    public String getIsdefault() { 
     return isdefault; 
    } 

    public void setIsdefault(String isdefault) { 
     this.isdefault = isdefault; 
    } 

    } 

活動ここ

this.pContent.parseNewPayments(response, newPaymentsList); 
        newPaymentsAdapter.notifyDataSetChanged(); 
        adaptercount = Integer.valueOf(newPaymentsAdapter.getCount()); 
        for (int i = 0; i < adaptercount; i++) { 
         View item = newPaymentsAdapter.getView(i, null, null); 
         layNewPayments.addView(item); 
        } 

が私のコードで、活動は今、この私に、正しくWSからのデータを表示します"削除"をしたいNDのparam

Card card = new Card(), 
id = card.getid() 

を渡すとHTTP POSTを実行し、TextViewのラジオボタンでメソッド「デフォルトを選択」、しかし、私はそれを実行するために、子のTextViewやラジオボタンにアクセス傾けます。

+0

関連するコードを追加してください。 –

+0

'ListView'を使用できない理由はありますか? – jaibatrik

+0

ラジオボタンを変更してスクロールすると、チェック値(リサイクル)が失われ、Linearlayoutでその問題が発生しないので、リストビューを使用しません。 –

答えて

0

ViewクラスのfindViewByIdメソッドを使用できます。例えば

LinearLayout ll = findViewById(R.id.parentLayout); 
int childcount = ll.getChildCount(); 
for (int i=0; i < childcount; i++){ 
    LinearLayout l = (LinearLayout) ll.getChildAt(i); 
    TextView delete = (TextView) l.findViewById(R.id.delete); 

    delete.setOnClickListener(...); 
} 
+0

これは大丈夫ですが、私は子供が1人しかいませんが、私はもっと子供がいるときに値が変わります。 –

+0

答えを更新しました。 – jaibatrik

+0

ありがとう、それは完璧に動作します! –

関連する問題