android - 无法在新 Activity 中显示来自先前 fragment 的数据

标签 android android-fragments android-intent

我在点击时在新 Activity 中显示来自先前 fragment 的字符串时遇到了一些问题。该字符串显示为“isnull”。

任何帮助将不胜感激。相关代码如下。

技能 Activity :

    public class Skill extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_skill);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Intent in = getIntent();
        String skill = in.getStringExtra("skill");

        TextView dispSkill = (TextView) findViewById(R.id.skill);
        dispSkill.setText("this skill is" + skill);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

}

RVAdapter(前一个 fragment 的):

public static class AssessViewHolder extends RecyclerView.ViewHolder
        implements View.OnClickListener {

    CardView cv;
    TextView assessName;
    TextView pracName;
    TextView required;
    TextView reqnum;

    AssessViewHolder(View itemView) {
        super(itemView);
        cv = (CardView)itemView.findViewById(R.id.cv);
        assessName = (TextView)itemView.findViewById(R.id.assessment);
        pracName = (TextView) itemView.findViewById(R.id.details);
        required = (TextView) itemView.findViewById(R.id.required);
        reqnum = (TextView) itemView.findViewById(R.id.reqnum);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Context context = v.getContext();

        Intent intent = new Intent(context, Skill.class);
        context.startActivity(intent);

        String assessName = ((TextView) v.findViewById(R.id.assessment))
                .getText().toString();
        intent.putExtra(KEY_SKILL, assessName);

        System.out.println(assessName);
    }
}

最佳答案

正如我在您的问题下方的评论中指出的那样,问题是您在将数据附加到 Intent 之前调用 startActivity,因此将 context.startActivity(intent); 移动到 的末尾onClick 方法应该可以工作

@Override
public void onClick(View v) {
    Context context = v.getContext();

    Intent intent = new Intent(context, Skill.class);

    String assessName = ((TextView) v.findViewById(R.id.assessment))
            .getText().toString();
    intent.putExtra(KEY_SKILL, assessName);

    System.out.println(assessName);
    context.startActivity(intent);
}

关于android - 无法在新 Activity 中显示来自先前 fragment 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39174416/

相关文章:

java - Android Listview 删除项目之间的任何空间

java - 市场上的 Android 应用收到 java.lang.IllegalStateException

android - WebView 在另一个类的 fragment 中加载 url

java - Android 工具栏中的内容编辑

java - 如何知道服务是否正在运行

android - Commons Math - 找不到类 org.apache.commons

java - 从 google maps DistanceMatrix api 在 android 中解析 JSON

android - 使用 ViewPager 更改选项卡时重新创建 fragment

java - 片段中的按钮导致 Activity 无法正常工作(已更新)

Android O - 混淆了隐式 Intent 和显式 Intent 的定义