2013-12-17 3 views
0

나는 훈련 목록이 포함 된 Mainactivity를 가지고 있습니다. 각 목록에서 클릭하면 전체 응용 프로그램에서 동일한 교육 세션이 시작됩니다. 싱글 톤을 사용하고 그것을 주 활동에 사용했습니다. 그러나 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); 

} 

내 싱글 톤 클래스 :

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; 
} 

} 두 번째 활동 onCreate()에서

답변

0

, 당신은이 작업을 수행 : currentTrainingnull입니다

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

때문에,이 단지 설정합니다 싱글 톤 변수 training t o null 및 돌아 가기 null.

실제로 사용자가 선택한 값을 설정하고 있습니까?

관련 문제