【问题标题】:I want to send some items to second activity's recycler view. How can I do it with Room我想将一些物品发送到第二个活动 recyclerview。我怎么能用房间做到这一点
【发布时间】:2021-06-05 18:15:01
【问题描述】:

我使用 RecyclerView、LiveData 和 Room 创建了一个简单的应用程序(我认为是这样)。你可以在 GitHub MyProject看到我的整个项目

我有主活动,那里有一个带有 TextView 的单词计数器,两个用于检查单词的按钮,并在每次单击后将其发送到另一个活动。当我打开第二个活动(YesList)时,我什么也看不到。那里是空的。我该如何解决?

SCREEN

    public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_YES = "com.saturnpro.wcounter.YES";
    public static final String EXTRA_NO = "com.saturnpro.wcounter.NO";
    public static final int NEW_WORD_ACTIVITY_REQUEST_CODE = 1;
    private TextView text;
    private TextView counterTxt;
    List<String> words;
    int count = 0;
    int i = 0;
    Intent intentYes;
    Intent intentNo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = findViewById(R.id.txt);
        counterTxt = findViewById(R.id.countertext);
        words = new ArrayList<>();
        words.add("hello");
        words.add("hi");
        words.add("cat");
        words.add("dog");
        words.add("drink");
        words.add("planet");
        words.add("space");
        words.add("kind");
        text.setText(words.get(0));
        counterTxt.setText(count+"");
        intentYes = new Intent(MainActivity.this, YesList.class);
        intentNo = new Intent(MainActivity.this, NoList.class);
    }

    public void addToYesList(View view) {
        i++;
        if(i < words.size()) {
            String word = words.get(i);
            text.setText(word);
            count++;
            counterTxt.setText(count+"");
            Intent replyIntent = new Intent();
            if (TextUtils.isEmpty(word)) {
                setResult(RESULT_CANCELED, replyIntent);
            } else {
                replyIntent.putExtra(EXTRA_YES, word);
                setResult(RESULT_OK, replyIntent);
            }
        }
        else {
            text.setText("Слов больше нет");
        }
    }

    public void addToNoList(View view) {
        i++;
        if (i < words.size()) {
            String word = words.get(i);
            text.setText(word);
        }
        else {
            text.setText("Слов больше нет");
        }
    }

    public void iknow(View view) {
        startActivityForResult(intentYes, NEW_WORD_ACTIVITY_REQUEST_CODE);
    }

    public void idontknow(View view) {
        startActivity(intentNo);
    }
}

第二个活动YesList。

public class YesList extends AppCompatActivity {
    private WordViewModel mWordViewModel;
    public static final int NEW_WORD_ACTIVITY_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_yes_list);
        RecyclerView recyclerViewYes = findViewById(R.id.listYes);
        final WordListAdapter adapter = new WordListAdapter(new WordListAdapter.WordDiff());
        recyclerViewYes.setAdapter(adapter);
        recyclerViewYes.setLayoutManager(new LinearLayoutManager(this));
       // mWordViewModel = new ViewModelProvider(this).get(WordViewModel.class);

        mWordViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(WordViewModel.class);

        mWordViewModel.getAllWords().observe(this, words -> {
            // Update the cached copy of the words in the adapter.
            adapter.submitList(words);
        });

    }


    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == NEW_WORD_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
            Words word = new Words(data.getStringExtra(MainActivity.EXTRA_YES));
            mWordViewModel.insert(word);
            Log.d("proverka", mWordViewModel.toString());
        } else {
            Toast.makeText(
                    getApplicationContext(),
                    R.string.empty_not_saved,
                    Toast.LENGTH_LONG).show();
        }
    }
}

【问题讨论】:

    标签: java android android-recyclerview android-room android-livedata


    【解决方案1】:

    我认为你可以使用recyclerview Item的onclick接口,你可以将数据从一个活动回收器发送到另一个活动回收器并将数据捕获到onBindViewHolder中。

    我正在添加代码 sn-p 以便您获得一些想法,

    public void onBindViewHolder(ContactsAdapter.ViewHolder holder, int position)     {
        // Get the data model based on position
        Contact contact = mContacts.get(position);
    
        // Set item views based on your views and data model
            TextView textView = holder.nameTextView;
    
            textView.setText(contact.getName());
            Button button = holder.messageButton;
            button.setText(contact.isOnline() ?     "Message" : "Offline");
            button.setEnabled(contact.isOnline());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多