将同一对象从一个活动传递到另一个活动

时间:2013-12-17 10:57:10

标签: android android-activity singleton

我有一个包含训练列表的Mainactivity。在每个列表上单击它会在整个应用程序中启动相同培训的会话。 我设法使用Singleton并将其访问到我的主要活动中。但onItemClick它需要对话框和按钮单击内部对话框,它应该采取另一个活动。现在我收到像java NullPointerException这样的错误。这是下面的代码; 记住:我也希望在第二项活动中进行相同的训练。

MainActivity类;

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

    currentTraining = (Training)arg0.getAdapter().getItem(arg2);

    Log.i("DEBUG", currentTraining.getTitle());

    CurrentTraining.getInstance().setTraining(currentTraining);

    Toast.makeText(
            getApplicationContext(),
            "You clicked on position : " + arg2 + " and ID : "
                    + currentTraining.getId(), Toast.LENGTH_LONG).show();

    dialog = new Dialog(MainActivity.this);
    dialog.setContentView(R.layout.dialog);

    dialog.setTitle(currentTraining.getTitle());

    TextView description = (TextView) dialog.findViewById(R.id.textView1);
    description.setText("Description: " + currentTraining.getDescription());

    TextView location = (TextView) dialog.findViewById(R.id.textView2);
    location.setText("Location: " + currentTraining.getLocation());

    TextView date = (TextView) dialog.findViewById(R.id.textView3);
    date.setText("Date: " + currentTraining.getDate());

    Button back_btn = (Button) dialog.findViewById(R.id.button1);
    back_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            dialog.dismiss();

        }
    });

    Button start_btn = (Button) dialog.findViewById(R.id.button2);
    start_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent intent = new Intent(MainActivity.this,
                    TraineeActivity.class);

            //intent.putExtra("trainingId", currentTraining.getId());

            //intent.putExtra("title", currentTraining.getTitle().toString());

            MainActivity.this.startActivity(intent);
        }
    });

    dialog.show();
}

在第二个活动类中;

Training currentTraining;

private ListView personNamesListView;

// Adapter to made the connection between ListView UI component and SQLite  data set.
private ListAdapter traineeListAdapter;

private TextView TitleView;

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

    currentTraining = CurrentTraining.getInstance().setTraining(currentTraining);
    Log.i("DEBUG", ""+currentTraining.getTitle());

    TitleView = (TextView)findViewById(R.id.training_title);
    TitleView.setText(currentTraining.getTitle());

    Button addnew = (Button) findViewById(R.id.add_btn);
    addnew.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Intent intent = new Intent(TraineeActivity.this,
                    FormActivity.class);
            TraineeActivity.this.startActivity(intent);
        }
    });
    personNamesListView = (ListView) findViewById(R.id.traineeslist);

    // Create a list that contains only full name of the trainee
    traineeListAdapter = new ArrayAdapter<Trainee>(this,
            android.R.layout.simple_list_item_1, currentTraining.getTraineeArrayList());
    personNamesListView.setAdapter(traineeListAdapter);

}

protected void onResume(){
    super.onResume();
    traineeListAdapter = new ArrayAdapter<Trainee>(this, android.R.layout.simple_list_item_1, currentTraining.getTraineeArrayList());
    personNamesListView.setAdapter(traineeListAdapter);

}

My Singleton Class:

public class CurrentTraining {

private Training training ; //Training is my model class

private static CurrentTraining instance;

private CurrentTraining() {

}

public static CurrentTraining getInstance() {
    if (instance == null)
        instance = new CurrentTraining();
    return instance;

}

public Training getTraining() {
    return training;
}

public Training setTraining(Training training) {
    return this.training = training;
}

}

1 个答案:

答案 0 :(得分:0)

在第二项活动的onCreate()中,您执行此操作:

currentTraining = CurrentTraining.getInstance().setTraining(currentTraining);

由于currentTrainingnull,因此只需将单例变量training设置为null并返回null

您实际上在哪里设置用户选择的值?