2015-04-11 4 views
1

Я использую Parse.com для заполнения ListView во втором действии моего приложения. При нажатии на элемент в ListView открывается третье действие. Проблема в том, что при использовании кнопки «Вверх» для возврата во второе действие ListView исчез. По какой-то причине это поведение не происходит, когда используется кнопка «Назад». Кроме того, это не происходит при использовании обычного запроса во втором действии. Что-то в вопросе query.whereEqualsTo («отдел», отдел) отбрасывает все это.ListView исчезает при возврате к активности после нажатия кнопки «Вверх»

первая активность:

public class MainActivity extends ActionBarActivity { 

private Button mMEButton; 
private Button mCEButton; 

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

    mMEButton = (Button)findViewById(R.id.meButton); 
    mCEButton = (Button)findViewById(R.id.ceButton); 



    mMEButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, ProfessorsActivity.class); 
      intent.putExtra("department", "ME"); 
      startActivity(intent); 
     } 
    }); 

    mCEButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, ProfessorsActivity.class); 
      intent.putExtra("department", "CE"); 
      startActivity(intent); 
     } 
    }); 
} 

второй Активность:

public class ProfessorsActivity extends ActionBarActivity { 

private ParseQueryAdapter<ParseObject> adapter; 

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

    Intent intent = getIntent(); 
    final String department = intent.getStringExtra("department"); 

    ParseQueryAdapter.QueryFactory<ParseObject> factory = 
      new ParseQueryAdapter.QueryFactory<ParseObject>() { 
       public ParseQuery create() { 
        ParseQuery query = new ParseQuery("Professor"); 
        query.whereEqualTo("department", department); 
        return query; 
       } 
      }; 

    adapter = new ParseQueryAdapter<ParseObject>(this, factory) { 
     @Override 
     public View getItemView(ParseObject professor, View v, ViewGroup parent) { 
      if (v == null) { 
       v = View.inflate(getContext(), R.layout.professor_item, null); 
      } 
      TextView contentView = (TextView) v.findViewById(R.id.professorNameTextView); 
      contentView.setText(professor.getString("lastName") + ", " + professor.getString("firstName")); 
      return v; 
     } 
    }; 
    //adapter.setTextKey("lastName"); 
    ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      final ParseObject tappedProfessor = adapter.getItem(position); 
      String professorId = tappedProfessor.getObjectId(); 

      Intent intent = new Intent(ProfessorsActivity.this, OfficeHoursActivity.class); 
      intent.putExtra("professorId", professorId); 
      startActivity(intent); 
     } 
    }); 
} 

третья активность:

public class OfficeHoursActivity extends ActionBarActivity { 

private TextView mNameTextView; 
private TextView mTimeTextView1; 
private TextView mDaysTextView1; 
private TextView mTimeTextView2; 
private TextView mDaysTextView2; 

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

    Intent intent = getIntent(); 
    String professorId = intent.getStringExtra("professorId"); 

    mNameTextView = (TextView) findViewById(R.id.professorName); 
    mTimeTextView1 = (TextView) findViewById(R.id.officeHourTime1); 
    mDaysTextView1 = (TextView) findViewById(R.id.officeHourDays1); 
    mTimeTextView2 = (TextView) findViewById(R.id.officeHourTime2); 
    mDaysTextView2 = (TextView) findViewById(R.id.officeHourDays2); 


    mNameTextView.setVisibility(INVISIBLE); 
    mTimeTextView1.setVisibility(INVISIBLE); 
    mDaysTextView1.setVisibility(INVISIBLE); 
    mTimeTextView2.setVisibility(INVISIBLE); 
    mDaysTextView2.setVisibility(INVISIBLE); 


    ParseQuery<ParseObject> query = ParseQuery.getQuery("Professor"); 

    // Retrieve the object by id 
    query.getInBackground(professorId, new GetCallback<ParseObject>() { 
     public void done(ParseObject currentProfessor, ParseException e) { 
      if (e == null) { 
       mNameTextView.setText(currentProfessor.getString("lastName") + ", " + currentProfessor.getString("firstName")); 
       mTimeTextView1.setText(currentProfessor.getString("start1") + " - " + currentProfessor.getString("end1")); 
       mDaysTextView1.setText(currentProfessor.getString("days1")); 

       mNameTextView.setVisibility(VISIBLE); 
       mTimeTextView1.setVisibility(VISIBLE); 
       mDaysTextView1.setVisibility(VISIBLE); 

       if (currentProfessor.getString("start2") != null) { 
        mTimeTextView2.setText(currentProfessor.getString("start2") + " - " + currentProfessor.getString("end2")); 
        mDaysTextView2.setText(currentProfessor.getString("days2")); 

        mTimeTextView2.setVisibility(VISIBLE); 
        mDaysTextView2.setVisibility(VISIBLE); 
       } 
      } else { 
       //something went wrong 
      } 
     } 
    }); 
+0

Поместите свой код ListView в onresume method.SO, чтобы вернуться из последнего действия в свою активность listview, вы можете снова получить свои данные в своем списке! – Hardy

ответ

0

Я решил эту проблему, добавив следующий тег ко второму действию в файле AndroidManifest.xml.

android:launchMode="singleTop" 

Это предотвращает повторную активацию кнопки Up при нажатии.

0

Кнопка вверх создает новый экземпляр родительской деятельности по умолчанию. Если вы хотите, чтобы вести себя как кнопки возврата только переопределить «onOptionsItemSelected» в «OfficeHoursActivity» и выполните следующие действия:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if(item.getItemId() == android.R.id.home) { 
     onBackPressed(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

Это еще один правильный ответ. Я изменил свою вторую активность так, что у нее есть метод onNewIntent(). Режим запуска «singleTop» больше не был достаточным для ведения списка. Этот код позволяет мне иметь метод onNewIntent() и поддерживать список в активности. – jhonkaman

0
private void ListView(){ 
ParseQueryAdapter.QueryFactory<ParseObject> factory = 
      new ParseQueryAdapter.QueryFactory<ParseObject>() { 
       public ParseQuery create() { 
        ParseQuery query = new ParseQuery("Professor"); 
        query.whereEqualTo("department", department); 
        return query; 
       } 
      }; 

    adapter = new ParseQueryAdapter<ParseObject>(this, factory) { 
     @Override 
     public View getItemView(ParseObject professor, View v, ViewGroup parent) { 
      if (v == null) { 
       v = View.inflate(getContext(), R.layout.professor_item, null); 
      } 
      TextView contentView = (TextView) v.findViewById(R.id.professorNameTextView); 
      contentView.setText(professor.getString("lastName") + ", " + professor.getString("firstName")); 
      return v; 
     } 
    }; 
    //adapter.setTextKey("lastName"); 
    ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setAdapter(adapter); 
} 

Теперь этот метод вызывается из onResume(). Не называть его onCreate().

@Override 
public void onResume(){ 
    super.onResume(); 
    ListView(); 

} 

Теперь проверьте .. Может быть, проблема будет решена .. !!!

Смежные вопросы