2010-02-26 73 views
1

當我填充一個ArrayAdapter時,首先屏幕的可見部分中的行將空白,除了第一行,這將是一個不希望的結果。然後,當我向下滾動,然後回來,所有的屏幕將被正確設置...請告訴我爲什麼會發生這種行爲?Android:爲什麼ArrayAdapter最初顯示null?

代碼:ArrayAdapter,內部類擴展到活動

 homeListView = (ListView) findViewById(R.id.home_list); 
     homeArrayAdapter = new HomeListArrayAdapter(this, R.id.home_list, 
       homeList); 
     homeListView.setAdapter(homeArrayAdapter); 

下部分爲類:

public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.home, null); 
     } 

     Home item = (homeList).get(position); 
     if (item != null) { 
      if (item.type_text == Home.SIMPLE_SHOUT) { 
       TextView tv1 = (TextView) findViewById(R.id.hTextView01); 
       if (tv1 != null) { 
        tv1 
          .setText(String.format(" %s\t:", 
            item.friend_name)); 
        final String item_friend_id_01 = String 
          .valueOf(item.users_id); 
        tv1.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          Toast toast = Toast.makeText(Tranz.this, 
            item_friend_id_01, Toast.LENGTH_LONG); 
          toast.show(); 
         } 
        }); 
       } 
       TextView tv2 = (TextView) findViewById(R.id.hTextView02); 
       if (tv2 != null) { 
        tv2.setText(String.format("\t%s", item.message)); 
        tv2.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
         } 
        }); 

       } 
       TextView tv3 = (TextView) findViewById(R.id.hTextView03); 
       if (tv3 != null) { 
        tv3.setVisibility(0); 
        tv3.setText(null); 
        tv3.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
         } 
        }); 

       } 
       ImageView imageView = (ImageView) findViewById(R.id.file_image); 
       if (imageView != null) { 
        imageView.setBackgroundDrawable(null); 
       } 
      } else if (item.type_text == Home.FILE_SHOUT) { 
       TextView tv1 = (TextView) findViewById(R.id.hTextView01); 

中,情況已經截斷,所以整個代碼不會出現在這裏。對此我很抱歉。這裏我所嘗試的是將類Home中的值放入兩個textView和一個ImageView中,該值可能隨變量item.type_text返回的值不同而變化

另外如果有人能告訴我另一個最佳做法這個,請幫忙。

回答

2

我不確定這是否是問題,但也許這會有所幫助。

我看到你將null傳遞給LayoutInflater.inflate作爲第二個參數。也許如果你傳遞父對象(這是作爲getView()的第三個參數傳入的ViewGroup,可能是你的ListView),你會得到更好的結果。

+0

謝謝synic,但沒有工作......有一些錯誤我Inflater代碼行......但通過將膨脹代碼更改爲下面給出的代碼來解決它... LayoutInflater inflater = context.getLayoutInflater(); 查看視圖= inflater.inflate(R.layout.home_list,null); 我不知道發生了什麼事,但工作。 再次感謝您的幫助。 – 2010-03-03 06:14:22

1

我有類似這樣的,我用view.findViewById(R.id.hTextVew01)解決的問題,而不是僅僅findViewById(R.id.hTextView01)

相關問題