Android - Как создать интерактивный просмотр списка?
Я хочу, чтобы все мои элементы списка в представлении списка открывались на новой странице, поэтому каждый элемент списка открывается на новой черной странице, которую я могу использовать. Я вообще не знаю, как это реализовать. Я искал несколько часов подряд и не могу найти ответ на свое решение. Было бы очень признательно, если бы кто-то мог показать и / или объяснить, как это сделать, вместо предоставления ссылки, но любой из них полезен.
Вот мой код до сих пор:
<string-array name="sections">
<item >Pro Constructive</item>
<item >Con Constructive</item>
<item >1st Speaker Cross</item>
<item >Pro Rebbutal</item>
<item >Con Rebuttal</item>
<item >2nd Speaker Cross</item>
<item >Pro Summary</item>
<item >Con Summary</item>
<item >Grand Cross</item>
<item >Pro Final Focus</item>
<item >Con Final Focus</item>
</string-array>
Это в моем string.xml
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:entries="@array/sections" >
</ListView>
Это в моем Activity_main.xml.
Куда мне пойти отсюда, чтобы сделать каждый элемент в моем списке кликабельным и открыть его на новой странице?
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Logcat больше не актуален.
4 ответа
На самом деле это довольно просто:
Это ваша активность с ListView, он реализует OnItemClickListener:
public class MainActivity extends Activity implements OnItemClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//* *EDIT* *
ListView listview = (ListView) findViewById(R.id.listView1);
listview.setOnItemClickListener(this);
}
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
Log.i("HelloListView", "You clicked Item: " + id + " at position:" + position);
// Then you start a new Activity via Intent
Intent intent = new Intent();
intent.setClass(this, ListItemDetail.class);
intent.putExtra("position", position);
// Or / And
intent.putExtra("id", id);
startActivity(intent);
}
редактировать
Приведенный выше код будет размещен в вашем MainActivity.java. Я изменил название класса на MainActivity
и contentView для setContentView(R.layout.activity_main)
- Имена только что созданного Android-проекта в Eclipse.
Пожалуйста, смотрите также 2 новые строки в разделе * * Edit * - они будут устанавливать Слушатель для кликов по элементам в списке.
Ваш Activity_main.xml должен выглядеть следующим образом:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:entries="@array/sections" >
</ListView>
</RelativeLayout>
Массив.xml (не string.xml) в вашей папке `res/values /` выглядит следующим образом
<resources>
<string-array name="sections">
<item >Pro Constructive</item>
<item >Con Constructive</item>
<item >1st Speaker Cross</item>
<item >Pro Rebbutal</item>
<item >Con Rebuttal</item>
<item >2nd Speaker Cross</item>
<item >Pro Summary</item>
<item >Con Summary</item>
<item >Grand Cross</item>
<item >Pro Final Focus</item>
<item >Con Final Focus</item>
</string-array>
</resources>
NB. Если вы скопируете и вставите этот код, он должен работать. Но вы получите ошибку, нажав на элемент, потому что вы не создали ListItemDetail.class
еще.
Вот пример того, как это может выглядеть:
Ваш ListItemDetail.java:
public class ListItemDetail extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listitem);
Intent intent = getIntent();
int position = intent.getIntExtra("position", 0);
// Here we turn your string.xml in an array
String[] myKeys = getResources().getStringArray(R.array.sections);
TextView myTextView = (TextView) findViewById(R.id.my_textview);
myTextView.setText(myKeys[position]);
}
}
И его активность_listitem.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/my_textview"/>
</LinearLayout>
Если вы скопируете этот код, он будет работать.
Вы можете заполнить listview из массива в string.xml следующим образом
String[] myKeys = getResources().getStringArray(R.array.sections);
ListView mListView = (ListView)findViewById(R.id.listView1);
mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myKeys));
и щелчок по элементам списка довольно простой и легкий метод. Просто используйте setOnItemClickListener
mListView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> arg0,View arg1, int position, long arg3)
{
Intent n = new Intent(getApplicationContext(), yourclass.class);
n.putExtra("position", position);
startActivity(n);
}
});
listView= (ListView) findViewById(R.id.listview);
Элемент списка
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(position==0){ Intent i=new Intent(MainActivity.this,Main3Activity.class); startActivity(i); } } });
- Внутри fragment.java с адаптером массива
String[] menuItems = {"По умолчанию C02", "По умолчанию 02 "};
ListView listView = (ListView) root.findViewById(R.id.main_menu);
ArrayAdapter<String> listViewAdapter = new ArrayAdapter<String>(
getActivity()
,android.R.layout.simple_list_item_1
,menuItems
);
listView.setAdapter(listViewAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView<?> l, View v, int position, long id){
Log.i("menuItems", "You clicked Item: " + id + " at position:" + position);
}
});
Вы используете onListItemClick
Функция для установки вашего намерения, которое загружает следующее действие и передает любые данные.
public void onListItemClick(ListView parent, View view, int position, long id)
{
Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("position", position);
startActivity(intent);
}