Щелкните элемент просмотра списка, чтобы отобразить другой вид списка в отдельном действии

#android #android-intent #android-listview

#Android #android-намерение #android-listview

Вопрос:

  • Я создал listview.Это было показано ниже.
  • вы можете видеть, что listview_array[] содержит Test, Category1 и Category2.

ListActivity.java:

 package com.steph.listview;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListActivity extends Activity {
    private ListView lv;
    private String listview_array[] = { "Test", "Category1", "Category2", "Category3"};

    public void onCreate(Bundle icicle)

    {
        super.onCreate(icicle);
        setContentView(R.layout.list1);
        lv = (ListView) findViewById(R.id.listview);
        lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, listview_array));
        lv.setTextFilterEnabled(true);
        lv.setOnItemClickListener(new OnItemClickListener() {

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


            }


        });
    }
}
  

list1.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@ id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
  

Вывод:

введите описание изображения здесь

  • Моя проблема в том, что если я нажму Test в ListView.В новом представлении списка должны отображаться следующие имена: Test1, Test2 и Test3.

  • Затем, если я щелкну Category1 в ListView.В новом представлении списка должны отображаться следующие имена: Video1, Video2 и Video3.

  • Затем, если я щелкну Category2 в ListView.В новом представлении списка должны отображаться следующие имена: Audio1, Audio2 и Audio3.

  • Я не знаю, что делать.Я могу создать еще три отдельных класса для Test, Category1 и Category2.И затем мне нужно использовать intent.

  • Но моя проблема в том, как я могу сделать это в одном классе.Помогите мне, если у вас есть какие-либо предложения.Спасибо.

Комментарии:

1. Вы хотите, чтобы при нажатии test затем test, category1, category2 заменялись на test1, test2 и test3?

2. Вы все еще не ответили на мой вопрос. Вы хотите заменить старые элементы ListView на новые или что-то еще?

3. @user3249477 нет. Я получаю такой вывод. Там, если я нажму на тест, новый ListView должен быть создан и показан Test1, Test2, Test3. Аналогично, если я нажму Category1 в ListView. В новом представлении списка должны отображаться следующие имена: Video1, Video2 и Video3. Затем, если я нажму Category2 в ListView. В новом представлении списка должны отображаться следующие имена: Audio1, Audio2 и Audio3. Я не знаю, что делать. Я могу создать еще три отдельных класса для Test, Category1 и Category3. И затем мне нужно использовать intent. Но моя проблема в том, как я могу выполнить все эти процессы в single class .

4. Как вы хотите отобразить это «новое представление списка»? Может быть, вам нужен расширяемый ListView ?

5. нет обычного просмотра списка @user3249477

Ответ №1:

Хотя я понятия не имею, почему вы хотите загрузить новый экземпляр этого действия, когда вы могли бы использовать его повторно, вот рабочий пример того, что вы хотите:

 package com.steph.listview;

import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * Created by Simon on 14.7.7.
 */

public class ListActivity extends Activity {
    private ListView lv;
    private String[] groupArray = {"Category1", "Category2", "Category3"};
    private String[][] childArray = {{"Test1", "Test2", "Test3"},
            {"Video1", "Video2", "Video3"}, {"Audio1", "Audio2", "Audio3"}};

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.list1);
        lv = (ListView) findViewById(R.id.listview);

        String[] data = getIntent().getStringArrayExtra("strArray");
        AdapterView.OnItemClickListener clickListener = null;

        // If no data received means this is the first activity
        if (data == null) {
            data = groupArray;
            clickListener = new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    Intent intent = new Intent(ListActivity.this, ListActivity.class);
                    intent.putExtra("strArray", childArray[position]);
                    startActivity(intent);
                }
            };
        }

        ArrayAdapter adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, data);

        lv.setAdapter(adapter);
        lv.setTextFilterEnabled(true);
        lv.setOnItemClickListener(clickListener);

    }
}
  

Ответ №2:

Если вам нужно загрузить элемент на основе вашей позиции, вам не нужно создавать другой класс.Достаточно одного класса

     lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position,
                long arg3) 
            {
            String list_item=(String) parent.getItemAtPosition(position);

                Intent intent=new Intent(this,IntentListActivity.class);
                intent.putExtra("List_item",list_item);
                startActivity(intent);

            }
    });
  

IntentListactivity.java

 package com.steph.listview;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class IntentListactivity extends Activity {
    private ListView lv;

               String[]  test_array={"test1","test2","test3"};
                 String[] video_array={"Video1","video2","video3"};

    public void onCreate(Bundle icicle)

    {
        super.onCreate(icicle);
        setContentView(R.layout.list1);
        lv = (ListView) findViewById(R.id.listview);
        Intent intent = getIntent();
        String list_value = (String) intent.getSerializableExtra("List_item");
        if("Test".equals("list_value"))
         {
          lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, test_array));
         }
         else if("Category1".equals("list_value")
         {
             lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, video_array));
         }

        lv.setTextFilterEnabled(true);

    }
}
  

Комментарии:

1. Намерение intent = новое намерение (это,Open_task_activity.class ); это была OpenTaskActivity или IntentListActivity.

2. Намерение не работает. В любом случае, спасибо за ваши усилия.» 1″

3. get intent возвращает любое значение