2015-09-09 62 views
0

我有一個ListView,顯示用戶從活動內動態生成的數組。基本上,該程序是一個計時器,用戶可以選擇一個他們想要報警發生的時間,並提供關於當該報警發生時應該做什麼的描述。如何清除列表視圖

我有ListView設置使用SimpleAdapter調用一個alarm_list_item.xml,其中包含兩個TextView的和我想顯示列表中的每個項目的圖標。

package com.example.sa_one.api; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.loopj.android.http.AsyncHttpClient; 
import com.loopj.android.http.AsyncHttpResponseHandler; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.UnsupportedEncodingException; 
import java.util.Arrays; 

public class MainActivity extends Activity { 
    public String str; 
    String data2[] = new String[50]; 
    String data; 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button btn = (Button) findViewById(R.id.btn); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       AsyncHttpClient client = new AsyncHttpClient(); 
       client.get("http://api.androidhive.info/contacts/", null, new api()); 

       CustomList adapter = new CustomList(getApplicationContext(),data2); 
       ListView list = (ListView) findViewById(R.id.list); 
       list.setAdapter(adapter); 
       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         Toast.makeText(MainActivity.this, "You Clicked at " + data2, Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     }); 
    } 

    @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; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 

    } 

    class api extends AsyncHttpResponseHandler { 

     @Override 
     public void onSuccess(int i, org.apache.http.Header[] headers, byte[] bytes) { 
      try { 
       str = new String(bytes, "UTF-8"); 
       Log.e("responce ss", "" + str); 


       try { 
        JSONObject jsonRootObject = new JSONObject(str); 
        JSONArray jsonArray = jsonRootObject.optJSONArray("contacts"); 
        int lengthJsonArr = jsonArray.length(); 

        for (i = 0; i < lengthJsonArr; i++) { 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 

         String id = jsonObject.optString("id"); 
         String name = jsonObject.optString("name"); 
         String email = jsonObject.optString("email"); 
         String address = jsonObject.optString("address"); 
         String gender = jsonObject.optString("gender"); 

         data = "Node" + i + " : \n id= " + id + " \n Name= " + name + " \n Email= " + email + " \n address= " + address + "\n gender=" + gender + "\n\n"; 
         Log.i("responce s1", "" + data); 

         data2[i] = data; 


         Log.i("responce s2", "" + Arrays.toString(data2)); 
        } 


       } catch (JSONException ignored) { 

       } 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(int i, org.apache.http.Header[] headers, byte[] bytes, Throwable throwable) { 

     } 
    } 
} 

這個代碼給錯誤我 當用戶選擇不添加自定義對話框,我想設置在alarm_list_item.xml TextView的的知名度,走了這麼不顯示爲報警列表上的空白。當我嘗試從活動中設置此參數時,我得到一個NullPointerException,因爲我假設xml文件實際上不是一個對象,但或多或​​少只是用作ListView的引用。有沒有辦法做到這一點?

到目前爲止,我通過將文本設置爲「沒有自定義通知集」來解決問題,但我希望有一個更清潔的選項,並在不使用時將它們全部刪除。

+0

如果您爲正在使用的編程語言/工具添加標籤,您可能會獲得更多幫助。 – DuncanKinnear

回答

0

p您可以通過findViewById()獲取TextView。因此,在onItemClick()中使用以下代碼:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    TextView tv = (TextView)parent.findViewById(R.id.your_textview); 
    tv.setVisibility(GONE); 
    Toast.makeText(MainActivity.this, "You Clicked at " + data2,  
    Toast.LENGTH_SHORT).show(); 
}