#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 возвращает любое значение