无法从对话框中访问活动的属性

时间:2017-09-02 10:37:26

标签: android arraylist

我有一个活动,我可以从中调用对话框。在积极对话框的事件中,我试图将“showAddPhraseDialog”方法的自定义项添加到List(phraseToSave),这是活动类的属性。

但是列表大小不会增加。

活动类:

public class AddActivity extends AppCompatActivity {

    private RecyclerView rv_select_person;
    private ChildHorizontalAdapter personAdapter;

    private RecyclerView rv_conversation;
    private UnsavedConversationAdapter conversationAdapter;

    private List<UnsavedPhrase> phrasesToSave;
    private List<Child> personsList;

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        phrasesToSave = new ArrayList<UnsavedPhrase>();

        // conversation widgets
        rv_conversation = (RecyclerView) findViewById(R.id.rv_conversation);
        conversationAdapter = new UnsavedConversationAdapter(phrasesToSave);
        LinearLayoutManager llm = new LinearLayoutManager(AddActivity.this);
        rv_conversation.setLayoutManager(llm);
        rv_conversation.setAdapter(conversationAdapter);

        ...

    }


    private void showAddPhraseDialog(final Child phrase_author)
    {
        boolean wrapInScrollView = true;
        new MaterialDialog.Builder(AddActivity.this)
                .title(R.string.label_what_was_said)
                .customView(R.layout.dialog_add_phrase, wrapInScrollView)
                .positiveText(R.string.button_add)
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {




                        EditText tePhrase = (EditText)dialog.findViewById(R.id.te_phrase);

                        String phrase_text = tePhrase.getText().toString();

                        if (!StringUtils.isNullAndEmpty(phrase_text)) {

                            UnsavedPhrase new_phrase = new UnsavedPhrase(phrase_text, phrase_author);

                            phrasesToSave.add(new_phrase);

                        }


                    }
                })
                .show();
    }

}

2 个答案:

答案 0 :(得分:0)

很抱歉迟到的回复你忘了通知适配器

if(conversationAdapter != null)
{
  conversationAdapter.notifyDataSetChanged();
}

答案 1 :(得分:0)

尝试调试并检查 phraseToSave.add(new_phrase); 之后,列表中有一个新元素。如果它有一个新元素,但您没有在UI中看到该元素,则应通知RecyclerView它的数据集已更改。尝试调用 notifyDataSetChanged()Docs为此。

您的代码看起来很好。如果添加后面的 phraseToSave 中没有新元素,请尝试清理项目。 构建 - &gt;清洁项目