2016-04-29 2 views
0

У меня возникли проблемы с загрузкой содержимого в новый listView. Если я использую setContentView, он отображает пустой список, и если я попытаюсь изменить мой намерение, приложение сработает. Пожалуйста, что я делаю неправильно. Основной класс Деятельность:Загрузка listView в новом виде

ListView lv; 
Context context; 

private int [] prgmImages={R.drawable.phones_and_tablets,R.drawable.home_and_kitchen_appliances, 
     R.drawable.beauty_health_and_personal_care,R.drawable.fashion,R.drawable.subscriptions, 
     R.drawable.electronics,R.drawable.windows_logo,R.drawable.music_and_movies, 
     R.drawable.baby_kids_and_toys,R.drawable.sports,R.drawable.books_and_stationery, 
     R.drawable.fastfood_and_eatery}; 
private String [] prgmNameList={"Phones & Tablets","Home & Kitchen","Beauty, Health & Personal Care", 
     "Fashion","Subscriptions","Electronics","Computer & Accessories","Music & Movies","Baby, Kids & Toys", 
     "Sports & Fitness","Books & Stationery","Fast Food, Drinks & Groceries"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    context=this; // Instantiate context after listView's properties are set. 
    lv=(ListView) findViewById(R.id.listView); 
    lv.setAdapter(new MainCustomAdapter(this, this.prgmNameList, this.prgmImages)); 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      switch(position){ 
       case 0: { setContentView(R.layout.activity_fone_cats); break; } 
       case 1: { setContentView(R.layout.activity_home_kit_cats); break; } 
       case 2: { setContentView(R.layout.activity_beauty_care_cats); break; } 
       case 3: { setContentView(R.layout.activity_fashion_cats); break; } 
       case 4: { setContentView(R.layout.activity_telecoms_cats); break; } 
       case 5: { setContentView(R.layout.activity_electronics_cats); break; } 
       case 6: { setContentView(R.layout.activity_computers_cats); break; } 
       case 7: { setContentView(R.layout.activity_entertainment_cats); break; } 
       case 8: { setContentView(R.layout.activity_toys_cats); break; } 
       case 9: { setContentView(R.layout.activity_sports_cats); break; } 
       case 10: { setContentView(R.layout.activity_stationeries_cats); break; } 
       case 11: { setContentView(R.layout.activity_f_food_drinks_grocery_cats); break; } 
      } 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

Моя основная конструкция макета XML выглядит следующим образом:

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:textSize="25dp" 
    android:textStyle="bold" 
    android:textColor="@color/colorBlack" 
    android:text="@string/action_companyName" /> 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_gravity="right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/icon" /> 

<TextView 
    android:id="@+id/textView_1" 
    android:layout_gravity="right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/action_motto" 
    android:textSize="18sp" 
    android:textStyle="italic|bold"/> 

<TextView 
    android:id="@+id/textView_2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/action_query" 
    android:textColor="#3a94d5" /> 

<SearchView 
    android:id="@+id/searchView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:queryHint="@string/action_query2" 
    android:contentDescription="@string/action_query2" /> 

<ImageView 
    android:id="@+id/imageView_1" 
    android:layout_width="match_parent" 
    android:layout_height="100sp" 
    android:scaleType="fitXY" 
    android:src="@drawable/ad" /> 

<TextView 
    android:id="@+id/textView_3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="." 
    android:textColor="#FFFFFF" /> 

<ListView 
    android:id="@+id/listView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
</ListView> 

Я построил его следующий пользовательский адаптер:

String [] category; // The category a sales-item belongs to 
Context context; 
int [] imageId; 
private static LayoutInflater inflater=null; 

public MainCustomAdapter(MainActivity currentActivity, String[] prgmNameList, int[] prgmImages) { 
    context = currentActivity; 
    category = prgmNameList; 
    imageId = prgmImages; 
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
@Override 
public int getCount() { 
    return category.length; 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public class Holder{ // Set an object to hold category items for each position in the list 
    TextView txt; 
    ImageView img; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    Holder holder=new Holder(); 
    View rowView = inflater.inflate(R.layout.programlist, null); 
    holder.txt=(TextView) rowView.findViewById(R.id.textView1); 
    holder.img=(ImageView) rowView.findViewById(R.id.imageView1); 
    holder.txt.setText(category[position]); // Hold the name of the selected category 
    holder.img.setImageResource(imageId[position]); // Hold the icon of the selected category 
    return rowView; 
} 

макет programlist был построен следующим образом :

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_gravity="center" 
    android:layout_width="48dp" 
    android:layout_height="48dp" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_gravity="center" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="24dp" 
    android:text="TextView" /> 

Я построил activity_fone_cats таким образом:

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:textSize="25dp" 
    android:textStyle="bold" 
    android:textColor="@color/colorBlack" 
    android:text="@string/action_companyName" /> 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_gravity="right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/icon" /> 

<TextView 
    android:id="@+id/textView_1" 
    android:layout_gravity="right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/action_motto" 
    android:textSize="18sp" 
    android:textStyle="italic|bold"/> 

<TextView 
    android:id="@+id/textView_2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/action_query" 
    android:textColor="#3a94d5" /> 

<SearchView 
    android:id="@+id/searchView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:queryHint="@string/action_query2" 
    android:contentDescription="@string/action_query2" /> 

<ImageView 
    android:id="@+id/imageView_1" 
    android:layout_width="match_parent" 
    android:layout_height="100sp" 
    android:scaleType="fitXY" 
    android:src="@drawable/ad" /> 

<TextView 
    android:id="@+id/textView_3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="." 
    android:textColor="#FFFFFF" /> 

<ListView 
    android:id="@+id/listView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
</ListView> 

Пожалуйста, как я могу гарантировать, что элементы в списке отображаются при нажатии на ListItem в основной деятельности и как остановить приложение из сбой, если я захочу использовать изменение намерений, вместо переключения contentViews?

+1

Пожалуйста, разместите трассировку стека исключения, «мои сбои приложения» недостаточно описательны. – Egor

+0

опубликовать ваше сообщение в журнале – sasikumar

+3

Цель использования setContentView (...) в методе onItemClickListener (...)? – Srinivasan

ответ

0
lv=(ListView) findViewById(R.id.listView); 

     lv.setAdapter(new MainCustomAdapter(this, prgmNameList, prgmImages)); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       if (position == 0) setContentView(R.layout.activity_fone_cats); 
       else if (position == 1) { 
        startActivityForResult(new Intent(view.getContext(),HomeKitchenCatsActivity.class), 0); 
        // setContentView(R.layout.activity_home_kit_cats); 
       } 
       else if (position == 2) setContentView(R.layout.activity_beauty_care_cats); 
       else if (position == 3) setContentView(R.layout.activity_fashion_cats); 
       else if (position == 4) setContentView(R.layout.activity_telecoms_cats); 
       else if (position == 5) setContentView(R.layout.activity_electronics_cats); 
       else if (position == 6) setContentView(R.layout.activity_computers_cats); 
       else if (position == 7) setContentView(R.layout.activity_entertainment_cats); 
       else if (position == 8) setContentView(R.layout.activity_toys_cats); 
       else if (position == 9) setContentView(R.layout.activity_sports_cats); 
       else if (position == 10) setContentView(R.layout.activity_stationeries_cats); 
       else if (position == 11) setContentView(R.layout.activity_f_food_drinks_grocery_cats); 
      } 
      }); 
+0

Привет @Ankita, с вашим ответом всегда давайте некоторое объяснение, ответы только с кодом не считаются достаточно хорошими. –

+0

Я пробовал это до #Ankita, но, когда я это делаю, элементы в списке в следующем представлении исчезают. Вот почему я пытался изменить намерение. –

+0

@Ankita, я отредактировал код, чтобы включить макет представления содержимого, к которому я пытаюсь перейти. Моя проблема в том, что элементы списка не отображаются в списке в файле activity_fone_cats (например). Он открывает представление, загружает каждый другой контент, но оставляет пустое пространство списка без содержимого дисплея.Я бы хотел, чтобы некоторые другие элементы отображались в списке, отображаемом в его представлении контента. –

0

@aburimegregory Да, у вас есть ответ. OnItem нажмите, чтобы привязать новый макет к вашей активности.

 lv=(ListView) findViewById(R.id.listView); 
     lv.setAdapter(new MainCustomAdapter(this, this.prgmNameList, this.prgmImages)); 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       switch(position){ 
        case 0: { setContentView(R.layout.activity_fone_cats); break; } 
        case 1: { setContentView(R.layout.activity_home_kit_cats); break; } 
        case 2: { setContentView(R.layout.activity_beauty_care_cats); break; } 
        case 3: { setContentView(R.layout.activity_fashion_cats); break; } 
        case 4: { setContentView(R.layout.activity_telecoms_cats); break; } 
        case 5: { setContentView(R.layout.activity_electronics_cats); break; } 
        case 6: { setContentView(R.layout.activity_computers_cats); break; } 
        case 7: { setContentView(R.layout.activity_entertainment_cats); break; } 
        case 8: { setContentView(R.layout.activity_toys_cats); break; } 
        case 9: { setContentView(R.layout.activity_sports_cats); break; } 
        case 10: { setContentView(R.layout.activity_stationeries_cats); break; } 
        case 11: { setContentView(R.layout.activity_f_food_drinks_grocery_cats); break; } 
       } 

       lv=(ListView) findViewById(R.id.listView); 
       lv.setAdapter(new MainCustomAdapter(this, this.prgmNameList, this.prgmImages)); 
      } 
     }); 

После связывания нового макета, вам нужно найти ListView и установить адаптер для загрузки списка элементов в новом ContentView. .

То же самое нужно сделать для всех других элементов в новом макете (Найдите вид и установите значение после привязки нового макета)

Примечание: Я не уверен, что ваш проект requirment.Your пути приближение к списку может быть неуместным. Потратьте еще немного времени, чтобы узнать список и его функциональность, а затем начать реализацию. Всего наилучшего.

+0

Спасибо. Я попробую это. –

+0

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

+0

@aburimeregory Да, я могу понять. одна вещь держится в вашем уме. Теперь вы сначала показываете XML-файл с некоторыми представлениями и списком, все имеют идентификатор, вы можете найти представление и добавить к нему клики или адаптеры. Когда вы изменяете xml активности (представления не привязаны к активности), вы не можете использовать идентификаторы предыдущего xml и не должны устанавливать какие-либо значения в предыдущие представления файлов xml, когда вы нажимаете элемент списка, вы привязываете новый xml к своему текущую деятельность, поэтому вам нужно найти все представления и добавить слушателей и рекламодателей, как новую деятельность с представлениями – Srinivasan

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