2016-04-29 119 views
0

我有點麻煩加載內容到一個新鮮的listView。如果我使用setContentView,它顯示一個空列表,如果我嘗試更改我的意圖應用程序崩潰。請問我做錯了什麼。主要活動類是:加載列表查看新的活動

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顯示以及如何停止從應用程序如果我想要改變Intents而不是切換contentView,會崩潰嗎?

+1

請發佈異常的堆棧跟蹤,「我的應用程序崩潰」不夠描述。 – Egor

+0

發佈日誌消息 – sasikumar

+3

在onItemClickListener(...)方法中使用setContentView(...)的目的是什麼? – 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方式接近列表視圖可能不合適。花更多的時間來學習listview及其功能,然後開始實施。祝一切順利。

+0

謝謝。我會試試這個。 –

+0

我試過這個,它沒有工作。請給我更多的幫助。由於系統崩潰,我已經在這個舞臺上工作了一個多月,現在它變得非常令人沮喪,因爲這是一個非常重要的項目工作。我根本不知道如何解決這個問題。我只想要的是,當用戶點擊列表中的一個項目時,應用程序會顯示一個新的內容視圖,該視圖由另一個列表和一組新項目組成。請問誰能幫忙? –

+0

@aburimegregory是的,我能理解。有一件事在你腦海中。現在,您最初顯示的是一個.xml文件,其中包含一些視圖和列表視圖,所有視圖都有id,您可能正在查找該視圖,並向其添加了點擊偵聽器或適配器。當您更改活動的xml(視圖未綁定活動)時,您不能使用以前的xml的id,並且不應該將任何值設置爲以前的xml文件視圖,當您單擊列表項時,您將綁定新的xml當前活動,因此您需要查找所有視圖並像添加視圖的新活動一樣添加偵聽器和加註器 – Srinivasan