2012-04-05 4 views
2

У меня был взгляд вокруг, и может быть, потому что я не уверен, что я ищу, но я не могу понять, как делать то, что я предполагаю должно быть довольно легко с Android.Как переключить активность с конкретными данными, отправленными

У меня есть массив данных для отображения на экране. Эти данные представляют собой класс, который содержит ключ, имя и изображение базы данных.

В настоящее время я показываю эти данные как ImageView и TextView. Я петлю через массив и добавляю новую строку в TableLayout, содержащую изображение и текст.

Я хотел бы, чтобы изображение и текст можно было щелкнуть, перейдя на новое действие.

Это новое действие должно знать ключ базы данных строки, нажатой для отображения правильных данных.

Вот что я до сих пор:

private void fillSuggestionTable(TableLayout tabSuggestions, Suggestion[] arrToAdd) 
{ 
    for(int i = 0; i < arrToAdd.length; i++) 
    { 
     /* Create a new row to be added. */ 
     TableRow trSuggestion = new TableRow(this); 
     trSuggestion.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 

     /* Create objects for the row-content. */ 
     ImageView imgDisplayPicture = new ImageView(this); 
     ImageHandler.loadBitmap(arrToAdd[i].strImageURL, imgDisplayPicture); 
     imgDisplayPicture.setLayoutParams(new LayoutParams(50,50)); 

     TextView txtArtistName = new TextView(this); 
     txtArtistName.setText(arrToAdd[i].strName); 
     txtArtistName.setTextColor(Color.parseColor("#000000")); 

     /* Add data to row. */ 
     trSuggestion.addView(imgDisplayPicture); 
     trSuggestion.addView(txtArtistName); 

     /* Add row to TableLayout. */ 
     tabSuggestions.addView(trSuggestion, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
    } 
} 

ответ

1

Есть ли причина, по которой вы используете TableView? похоже, то, что вы хотите выполнить, было бы намного проще с помощью ListView & пользовательских CursorAdapter, где адаптер может обрабатывать перевод из базы данных в строку ListView. В тот момент, начиная новую деятельность, которая знает идентификатор базы данных тривиально:

mListView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick (AdapterView<?> parent, View view, int position, long id) { 
    Intent i = new Intent(MyActivity.this, MyOtherActivity.class); 
    i.putExtra("database_id", id); 
    startActivity(i); 
    } 
}); 

И в MyOtherActivity:

private int dbId; 
protected void onCreate(Bundle savedInstanceState) { 
    //do stuff 
    dbId = getIntent().getIntExtra("database_id", -1); // the -1 is the default if the extra can't be found 
} 
+0

Нет, единственная причина, по которой я использую Tableview, поскольку это имело для меня наибольшее значение в то время. Я предполагаю, что id будет идентификатором itme в списке? Поэтому, когда я заполняю ListView, пока я устанавливаю идентификатор элемента списка в ключ базы данных, я могу легко получить идентификатор? –

+0

Это еще проще: просто добавьте CursorAdapter, как описано ниже, и когда вы передаете курсор из БД, если вы назвали ваши столбцы SQL так, как ему нравится, он устанавливает для каждого свойства в представлении listView значение ID. http://droiddevelop.tumblr.com/post/12322798864/part-136-making-a-custom-cursor-adapter – JRaymond

1

Для передачи дополнительных данных в другую деятельность, вам нужно добавить дополнительную информацию с Intent.putExtra (имя, значение) методами.

Например, чтобы отправить Намерение:

Intent i = new Intent([pass info about next Activity here]); 
i.putExtra("databaseKey", databaseKey); 
startActivity(i); 

Чтобы получить данные снова:

public void onCreate(Bundle savedInstance) 
{ 
    // Do all initial setup here 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null && extras.containsKey("databaseKey")) 
    { 
     int databaseKey = extras.getInt("databaseKey"); 
     // Load database info 
    } 
    else 
    { 
     // No data was passed, do something else 
    } 
} 

EDIT: Для того, чтобы узнать, когда строки таблицы нажата, вам необходимо реализуйте View.OnClickListener и установите onClickListener для используемых вами TableRows.

Например:

/* Create a new row to be added. */ 
TableRow trSuggestion = new TableRow(this); 
trSuggestion.setOnClickListener([listener]); 

Единственная проблема, вы будете иметь это в отношении ТОЧКИ ЗРЕНИЯ в идентификатор соответствующей строки базы данных ID. HashMap должен помочь.

+0

Я видел этот метод передачи данных. Проблема, с которой я столкнулся, - это знать, какой элемент был нажат, и получить данные, специфичные для этого элемента. –

+0

Я обновил свой ответ с информацией о слушателях и т. Д. – Raceimaztion

0

Это довольно простая процедура. This blog объясняет это простыми словами.

+0

Я видел этот метод для передачи данных. Проблема, с которой я столкнулся, - это знать, какой элемент был нажат, и получить данные, специфичные для этого элемента. –

+0

Вы можете прикреплять данные к представлению с помощью 'view.setTag (Object)', а затем извлекать его с помощью 'view.getTag()'. –

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