it-swarm.com.ru

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>

Это в моей деятельности.

Куда мне пойти отсюда, чтобы сделать каждый элемент в моем списке кликабельным и открыть его на новой странице?

Заранее спасибо!

Правка:

Logcat больше не актуален.

10
Michael Abreu

На самом деле это довольно просто:

Это ваша активность с 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>

 array.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>

N.B .: Если вы скопируете и вставите этот код, он должен работать. Но вы получите ошибку, нажав на элемент, потому что вы еще не создали 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>

Если вы скопируете этот код, он будет работать.

31
Delpes

вы можете заполнить 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);
    }
});
1
Ram kiran

Вы используете функцию 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);
}
0
trapper

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);
            }
        }
    });
    
0
Aadil