0

XML から 1 つのビューを作成しています。xml で 1 つの行を定義し、メイン レイアウトでレイアウト インフレータを使用して追加し、コンポーネント (TextView、EditText、Button) ランタイムの ID を設定しています。3つの要件があります

  1. ユーザーは新しい行を追加できます(完了しています)
  2. ユーザーは行を削除できます(行われます
  3. 作成した行からデータをフェッチする必要があります。(それも行われています)

私はこのチュートリアルに従ってい ます https://github.com/laoyang/android-dynamic-views#readmeも素晴らしいチュートリアルです。

実行時に各コンポーネントの ID を作成し、それを arraylist に追加して、ループを介してそこからデータをフェッチできるようにします。すなわち

for (EditText editText : Quantity) { }

  1. 問題は、ユーザーが各行の削除ボタンを押すと、次のコードを使用してレイアウトとそのコンポーネントから行を削除することです。

Main.removeView((ビュー) v.getParent());

ただし、対応するコンポーネント ID はすでに配列リストに追加されています。ユーザーが行の削除ボタンを押したときに、配列リストからも削除できるように、その位置を取得する必要があります。

  1. 各行には、スピナー スタイルのテキストビューがあります。テキストビューをクリックしてスピナーを開きたいのですが、すべての行ではなく、そのテキストビューに値を設定する必要があります。

この場合、私を助けてください。私は本当に立ち往生しており、締め切りは今日です。

ありがとうございます

4

2 に答える 2

0

で子のインデックスを取得できViewGroupますindexOfChild(View)。追加する行の前にある子ビューの数(存在する場合)によっては、そのインデックスからオフセットを差し引く必要がある場合があります。

http://developer.android.com/reference/android/view/ViewGroup.html#indexOfChild(android.view.View)

public void onDeleteClicked(View v) {
    // get index
    int index = mContainerView.indexOfChild((View) v.getParent()) - offset;
    // remove from ArrayList
    myArrayList.remove(index);
    // remove the row by calling the getParent on button
    mContainerView.removeView((View) v.getParent());
}

ViewGroupビュー(行)を追加する前に、ビュー(行)を追加するのの初期インデックスを保存することで、オフセットを取得できます。これは、提供されたリンクの場合(0に等しいため不要ですが)、次のようになります。

private int offset = 0; 

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    // this should be equal to the index where the first row will be inserted
    // offset = 0 with the code in your link
    offset = mContainerView.getChildCount() - 1;

    // Add some examples
    inflateEditRow("Xiaochao");
    inflateEditRow("Yang");
}
于 2013-01-27T11:28:42.407 に答える