如何在listView中有项目时使TextView不可见?

时间:2012-12-07 05:00:10

标签: android listview textview

我喜欢在listView中没有项目时显示textView,而当listView中有项目时,textView将不会显示。我的问题是,即使listView中有项目,textView仍会在短时间内显示,然后将项目加载到listView中。那么,当listView中有项目时,如何使TextView不可见?

以下是代码:

 public void onCreate(Bundle savedInstancesState){
    super.onCreate(savedInstancesState);
    setContentView(R.layout.list_screen);
    user = getIntent().getExtras().getString("user");
    Log.d("dg",user);
    getList();
    lv = (ListView) findViewById(android.R.id.list);
    emptyText = (TextView)findViewById(android.R.id.empty);
    lv.setEmptyView(emptyText);       
}

public void getList(){
    new Thread(){
        public void run(){
            try{
                 httpclient = new DefaultHttpClient();
                 httppost = new HttpPost("http://www.kryptoquest.com/tracker/friendlist.php");
                 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                 nameValuePairs.add(new BasicNameValuePair("Username", user));
                 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                 response = httpclient.execute(httppost);
                 is = response.getEntity().getContent();
            }catch(Exception e){
                Log.e("log_tag", "Error:"+e.toString());
            }

            //convert response to string
            try{
                    reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                    sb = new StringBuilder();
                    line = null;
                    while ((line = reader.readLine()) != null) {

                            sb.append(line + "\n");

                    }
                    Log.d("test",sb.toString());
                    is.close();

                    result = sb.toString();

                    result = result.substring(0, result.length()-1);                    
                //    Log.d("result",result);
                    friend = new ArrayList<String>(Arrays.asList(result.split("[*]")));   
                  Log.d("size",String.valueOf(friend.size()));
                    runOnUiThread(new Runnable()
                    {
                        public void run(){
                            adapter = new ArrayAdapter<String>(ThirdActivity.this,android.R.layout.simple_list_item_1,friend);
                            setListAdapter(adapter); 
                        }
                    });


            }catch(Exception e){
                    Log.e("log_tag", "Error converting result "+e.toString());
            }
        }
    }.start();
}

list_screen.xml

 <?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="fill_parent"
  >

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

<TextView   android:id="@+id/android:empty"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:text="@string/no_friend"
            android:gravity="center_vertical|center_horizontal"/>

</LinearLayout>

4 个答案:

答案 0 :(得分:0)

  

我的问题是,即使listView中有项目,textView仍然会在短时间内显示,然后将项目加载到listView中。

请勿在{{1​​}}中使用setEmptyView(),而是将onCreate()添加到XML中的TextView,并在调用{{}后使用android:visibility="gone" 1}}。

setEmptyView()

答案 1 :(得分:0)

您可以使用类似

if语句轻松完成
if (listView.getSize() > 0){
    textView.setVisibility(View.GONE);
    //or use
    textView.setVisibility(View.INVISIBLE);
} else {
    //your list is empty
    textView.setVisibility(View.VISIBLE);
}
在将adapter添加到ListView后,您需要调用此诅咒

答案 2 :(得分:0)

答案 3 :(得分:0)

如果存在使用有效方法的列表项,则可以隐藏textView: AdapterView.setEmptyView(查看emptyView)

这是一个示例: ListView listView; TextView textView;

listView.setEmptyView(textView); 当列表中有项目时,它将自动隐藏textView;当listView为空时,它将自动显示textView!