2011-05-02 79 views
3

這是我的自定義列表視圖佈局。Android - 自定義列表視圖中的空列表

我添加了ID爲「機器人:空」的「空列表」文本視圖,但是當列表爲空時不顯示「空文」視圖。

任何建議,請。

更新 - 更新了佈局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" 
    android:paddingLeft="5dip" android:paddingRight="5dip" 
    android:paddingTop="15dip" android:paddingBottom="15dip" 
    android:cacheColorHint="@color/match_bg2" android:background="@color/match_bg"> 
    <ImageView android:id="@+id/flag_left" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:background="@drawable/flag" 
     android:src="@drawable/flag_default" /> 
    <LinearLayout android:orientation="vertical" 
     android:padding="10dip" android:layout_width="0dip" android:gravity="center" 
     android:layout_weight="1" android:layout_height="fill_parent"> 
     <TextView android:id="@+id/item_match_label" 
      android:layout_width="wrap_content" android:layout_height="0dip" 
      android:layout_weight="1" android:gravity="center" 
      android:textColor="@color/match_fg" android:textStyle="bold" 
      android:singleLine="true" 
      android:ellipsize="marquee" 
      android:focusableInTouchMode="true" 
      /> 
    </LinearLayout> 
    <ImageView android:id="@+id/flag_right" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:background="@drawable/flag" 
     android:src="@drawable/flag_default" /> 

    <TextView android:id="@id/android:empty" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="#FF0000" 
       android:text="No data"/> 
</LinearLayout> 

這裏是我的列表視圖活動

public class LatestMatchesListActivity extends ListActivity { 
... 

private void createMatchList() { 

    /* 
    Log.i(MY_DEBUG_TAG, "Checking Match store size before passing it to custom adapter: "+mStore.size()); 
    if(mStore.size() == 0){ 
     Log.i(MY_DEBUG_TAG, "Got Empty match store, so checking connectivity.."); 
     Match m = new Match(); 
     if(isOnline()){ 
      Log.i(MY_DEBUG_TAG, "Internet is accessible, so adding no matches object: "); 
      m.setId(-1); 
     } else{ 
      Log.i(MY_DEBUG_TAG, "No Internet accessible, so adding mo caonnectivity match object: "); 
      m.setId(-2); 
     } 
     mStore.add(m); 
    } else { 
     Log.e(MY_DEBUG_TAG, "Match store is not empty "); 
    } 
    */ 
    //mStore.clear(); 
    Log.i(MY_DEBUG_TAG, "Passing match list to custom adapter: "+mStore.toString()); 
    this.mAdapter = new MatchAdapter(this, R.layout.list_matches, mStore); 
    this.setListAdapter(this.mAdapter); 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 
    lv.setBackgroundDrawable(null); 
    lv.setBackgroundResource(0); 

} 

和自定義ArrayAdapter

public class MatchAdapter extends ArrayAdapter<Match> { 
    private ArrayList<Match> items; 
    private final String MY_DEBUG_TAG = "MatchAdapter"; 

    public MatchAdapter(Context context, int textViewResourceId, ArrayList<Match> items) { 
     super(context, textViewResourceId, items); 
     this.items = items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_matches, null); 
     } 
     Match m = items.get(position); 
     if (m != null) { 
      TextView itemLabel = (TextView) v.findViewById(R.id.item_match_label); 
      ImageView imageFlagLeft = (ImageView) v.findViewById(R.id.flag_left); 
      ImageView imageFlagRight = (ImageView) v.findViewById(R.id.flag_right); 

      if(m.getId() == -1){ 
       itemLabel.setText("No Live Matches."); 
       imageFlagLeft.setVisibility(View.INVISIBLE); 
       imageFlagRight.setVisibility(View.INVISIBLE); 
      } else if(m.getId() == -2){ 
       itemLabel.setText("No Intenet connectivity."); 
       imageFlagLeft.setVisibility(View.INVISIBLE); 
       imageFlagRight.setVisibility(View.INVISIBLE); 
      } else { 
       itemLabel.setText(m.getTeam1() + " v/s " + m.getTeam2()); 
       imageFlagLeft.setImageResource(getFlagResource(m.getTeam1())); 
       imageFlagRight.setImageResource(getFlagResource(m.getTeam2())); 
      } 

     } 
     return v; 
    } 

    private int getFlagResource(String teamName) { 
     Log.i(MY_DEBUG_TAG, "Getting the flag of " + teamName); 
     String flagString = "flag_" + teamName.replace(" ", "_").toLowerCase(); 
     int resId = getContext().getResources().getIdentifier(flagString, "drawable", "com.itflux.DroidChirp"); 
     if (resId != 0) { 
      return resId; 
     } 
     return R.drawable.flag_default; 
    } 
} 
+0

textview沒有顯示在您的佈局? – vnshetty 2011-05-02 05:28:09

+0

是@vnshetty,列表爲空時不顯示文本視圖。 – 2011-05-02 05:30:30

+0

你可以在圖形佈局中看到你的textview嗎? – vnshetty 2011-05-02 08:35:31

回答

3

你有你的ListView適合屏幕,並在LinearLayout您的TextView顯示在下那ListView所以它是不可見的(這將是,如果你使用ScrollView)。

例如,您需要使用作爲佈局的根元素RelativeLayout使TextView位於ListView之上。

+0

我試着用'RelativeLayout'包裝我的佈局,並且像你提到的那樣移動了'TextView',當前代碼可以在http://pastebin.com/xFBqErgq查看,但是空的文本視圖仍然沒有顯示。 – 2011-05-02 06:10:48

+0

你怎麼觸發'TextView'出現?你可以分享相關的代碼作爲你的問題的擴展嗎?謝謝! – rekaszeru 2011-05-02 06:47:18

+0

請看到更新的問題 – 2011-05-02 07:00:47

1

使用@ + ID空和@id列表:機器人:ID = 「@ + ID /安卓:空」

+0

@Sandy添加+的ID,它並沒有幫助 – 2011-05-02 06:03:24

+0

它應該工作,你在哪裏使用列表您可以發佈您的Java代碼? – Sandy 2011-05-02 06:33:44

+0

@Sandy請參閱更新後的問題 – 2011-05-02 07:00:25

0

你的問題是與ListView height屬性。將其設置爲wrap_content

+0

請參閱最新的問題 – 2011-05-02 07:01:14

2

好像這個問題仍然沒有解決。所以這是我如何解決它。我觸發的功能,這將基本刷新列表佈局每當數據如下變化:

ListView lv = getListView(); 
    lv.requestLayout(); 
    if(aa.arrayValue.size() > 0) { 
     lv.setVisibility(ListView.VISIBLE); 
     setListAdapter(new Adaptor(this, R.layout.main_list_item, aa.arrayValue)); 
    } 
    else { 
     lv.setVisibility(ListView.INVISIBLE); 
     TextView tv = (TextView) findViewById(android.R.id.empty); 
     tv.requestLayout(); 
     tv.setVisibility(TextView.VISIBLE); 
    } 

希望這可以幫助你!