2017-07-19 13 views
0

チェックボックスとEditTextフィールドを含むリスト項目のカスタムレイアウトがあります。新しいアイテムが追加されても、リストがクリアされても、[追加]ボタンを押すと表示されます。以前のデータはすべて消えます。私は私が間違っているつもりですどこ私に知らせてくださいAndroidに新しいです...ここで新しい行が追加されると、すべてのListView項目がクリアされます

は私のMainActivityです:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // ArrayList for items 
    final ArrayList<Item> itemArrayList = new ArrayList<>() ; 

    // CheckBox and EditText 
    CheckBox checkBox = (CheckBox) findViewById(R.id.default_checkbox) ; 
    EditText editText = (EditText) findViewById(R.id.default_edit_text) ; 

    // Add Button 
    Button addButon = (Button) findViewById(R.id.add_button); 

    // Item Adapter 
    final ItemAdapter itemAdapter = new ItemAdapter(this, itemArrayList) ; 

    // ListView Object 
    final ListView listView = (ListView) findViewById(R.id.list) ; 

    // Set Adapter 
    listView.setAdapter(itemAdapter); 

    // Setting the onClick Listener 
    addButon.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      CheckBox cBox = new CheckBox(MainActivity.this); 
      //EditText eText = new EditText(MainActivity.this) ; 

      itemArrayList.add(new Item(cBox, "")) ; 
      itemAdapter.notifyDataSetChanged() ; 
     } 
    }); 
} 
} 

そして、ここに私のアダプタクラスです:

public class ItemAdapter extends ArrayAdapter<Item> { 

// Arraylist 
private ArrayList<Item> itemsArrayList = new ArrayList<>() ; 

//Constructor 
/*@param context This is the class which is sent as the context 
* @param items This is the ArrayList 
* @param resource Extra elements*/ 
public ItemAdapter(@NonNull Context context, ArrayList<Item> items) { 
    super(context,0, items); 
} 

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

    View listView = convertView ; 

    if (listView == null) { 
     listView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); 
    } 

    // Item at index position 
    Item currentItem = getItem(position) ; 

    // Initializing elements 
    CheckBox checkBox = (CheckBox) listView.findViewById(R.id.default_checkbox); 
    EditText editText = (EditText) listView.findViewById(R.id.default_edit_text); 

    // Setting the state of CheckBox 
    if (currentItem.getCheckBox().isChecked()) { 
     checkBox.setChecked(true); 
    } else { 
     checkBox.setChecked(false); 
    } 

    // Setting the state of EditText 
    editText.setText(currentItem.getCheckBoxText()); 

    return listView; 
} 
} 

Itemクラス:

public class Item { 

// CheckBox 
private CheckBox checkBox ; 

// Text 
private String checkBoxText ; 

// Constructor 

//* @param rootView This is the layout which contains the checkBox and editText element 
//* @param cBox This is the checkBox 
//* @param text This is the text alongside the checkBox 
public Item(CheckBox cBox, String text){ 
    // Initializing the Item 
    checkBox = cBox ; 
    checkBoxText = text ; 
} 

// Method to get checkBox 
public CheckBox getCheckBox(){ 
    return checkBox ; 
} 

// Method to get checkBoxText 
public String getCheckBoxText(){ 
    return checkBoxText ; 
} 

// Method to set CheckBox 
/* 
* @param cBox This is the checkBox which is set*/ 
public void setCheckBox(CheckBox cBox){ 
    checkBox = cBox ; 
} 

// Method to set checkBoxText 
public void setCheckBoxText(String text){ 
    checkBoxText = (text) ; 
} 
} 

答えて

0

これを試してください。 あなたは、あなたがに渡されたリストに新しい項目を追加している、このメソッドを呼び出すと

public void addNewItem(Item item) 
{ 
    itemsArrayList.add(item); 
} 

今すぐ

itemAdapter.add(new Item(cBox, eText.getText().toString())) ; 
itemAdapter.notifyDataSetChanged() ; 
+0

私はこれを試しましたが、まだ動作していません。 – heytherebrowncow

0

をクリックし、ボタンで次のように新しい項目を追加するには、アダプタにこのメソッドを追加します。アダプタ。

itemArrayList.add(new Item(cBox, eText.getText().toString())) ; 
     itemAdapter.notifyDataSetChanged() ; 

これで、アダプタ内のリストの参照は初期化されず、親クラスに渡されます。

は、アダプタのコンストラクタこれだけです

this.itemsArrayList = items; 

内のこの行を追加します。

+0

助けてくれてありがとうございますが、まだ動作していません。私は問題を理解できません... – heytherebrowncow

+0

もう少し詳しくあなたのコードをチェックし、データではなくリスト内のビューを追加することに注意しました。これは実行しないでください。作成する必要がありますチェックボックスのステータスや、ビュー自体ではなく編集テキストのテキストなどの新しいデータセットは、ステータスのみが維持されます。 –

+0

あなたが言ったようにしました...しかし、追加ボタンを押すか、私の電話のBackソフトキーを押すと、すべての行がクリアされます。 – heytherebrowncow

関連する問題