2012-09-02 37 views
8

Tôi có một ứng dụng hiển thị dữ liệu trong chế độ xem danh sách nhưng tôi muốn hàng đầu tiên bị thổi phồng bởi bố cục khác nhau và tôi đã làm điều đó nhưng vì có số lượng lớn danh sách, tôi muốn tối ưu hóa listview và có vấn đề. tôi không thể tối ưu hóa listview khi iam điền listview trên theo cách đó, vậy làm thế nào tôi có thể đưa nội dung mà nên đi trong hàng nắm tay bên trong tiêu đề listview phù thủy được thổi phồng bởi một số bố trí, đây là mã của AdaptorTiêu đề xem danh sách Android

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.main); 

    LinearLayout content = (LinearLayout) findViewById(R.id.content); 
    LinearLayout refLayout = (LinearLayout) findViewById(R.id.refLayout); 

    refLayout.setVisibility(View.GONE); 

    mBtnNaslovnica = (Button) findViewById(R.id.mBtnNaslovnica); 
    mBtnNaslovnica.setSelected(true); 
    TextView txtView=(TextView) findViewById(R.id.scroller); 
txtView.setSelected(true); 
    loadPage(); 
    ImageButton mBtnRefresh = (ImageButton) findViewById(R.id.btnRefresh); 
    mBtnRefresh.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      new LoadingTask().execute(URL); 
     } 
    }); 

} 

public void loadPage(){ 

    ArrayList<HashMap<String, String>> homeList = new ArrayList<HashMap<String, String>>(); 



     JSONObject jsonobj; 
     try { 
      jsonobj = new JSONObject(getIntent().getStringExtra("json")); 
      JSONObject datajson = jsonobj.getJSONObject("data"); 
      JSONArray news = datajson.getJSONArray(TAG_NEWS); 
      JSONArray actual = datajson.getJSONArray("actual"); 
      for(int i = 0; i < news.length(); i++){ 
       JSONObject c = news.getJSONObject(i); 

       // Storing each json item in variable 
       String id = c.getString(TAG_ID); 
       String title = c.getString(TAG_TITLE); 
       String story = c.getString(TAG_STORY); 
       String shorten = c.getString(TAG_SH_STORY); 
       String author = c.getString(TAG_AUTHOR); 
       String datetime = c.getString(TAG_DATETIME); 
       String img = c.getString(TAG_IMG); 
       String big_img = c.getString(TAG_BIG_IMG); 



       // creating new HashMap 
       HashMap<String, String> map = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       map.put(TAG_ID, id); 
       map.put(TAG_TITLE, title); 
       map.put(TAG_STORY, story); 
       map.put(TAG_IMG, img); 
       map.put(TAG_BIG_IMG, big_img); 
       map.put(TAG_DATETIME, datetime); 
       map.put(TAG_AUTHOR, author); 

       // adding HashList to ArrayList 
       homeList.add(map);} 
      for(int i = 0; i < actual.length(); i++){ 
       JSONObject c = actual.getJSONObject(i); 

       // Storing each json item in variable 
       String id = c.getString(TAG_ACT_TIME); 
       String body = c.getString(TAG_ACT_BODY); 
       String anews = " | "+ id+ " " + body; 
       String cur_anews = ((TextView) findViewById(R.id.scroller)).getText().toString(); 
       String complete = anews + cur_anews; 
       TextView anewstv = (TextView) findViewById(R.id.scroller); 
       anewstv.setText(complete); 

       } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 






    list=(ListView)findViewById(R.id.list); 

    // Getting adapter by passing xml data ArrayList 
    adapter=new LazyAdapter(this, homeList);   
    list.setAdapter(adapter); 


    // Click event for single list row 
    list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
      String cur_title = ((TextView) view.findViewById(R.id.title)).getText().toString(); 
      String cur_story = ((TextView) view.findViewById(R.id.einfo2)).getText().toString(); 
      String cur_author = ((TextView) view.findViewById(R.id.einfo1)).getText().toString(); 
      String cur_datetime = ((TextView) view.findViewById(R.id.tVdatetime)).getText().toString(); 
      String cur_actual = ((TextView) findViewById(R.id.scroller)).getText().toString(); 
      ImageView cur_img = (ImageView) view.findViewById(R.id.list_image); 
      String cur_img_url = (String) cur_img.getTag(); 

      Intent i = new Intent("com.example.androidhive.CURENTNEWS"); 
      i.putExtra("CUR_TITLE", cur_title); 
      i.putExtra("CUR_STORY", cur_story); 
      i.putExtra("CUR_AUTHOR", cur_author); 
      i.putExtra("CUR_DATETIME", cur_datetime); 
      i.putExtra("CUR_IMG_URL", cur_img_url); 
      i.putExtra("CUR_ACTUAL", cur_actual); 
      startActivity(i); 
     } 
    });  
} 

public void reloadPage(String jsonstring){ 
    ArrayList<HashMap<String, String>> homeList = new ArrayList<HashMap<String, String>>(); 



    JSONObject jsonobj; 
    try { 
     jsonobj = new JSONObject(jsonstring); 
     JSONObject datajson = jsonobj.getJSONObject("data"); 
     JSONArray news = datajson.getJSONArray(TAG_NEWS); 
     JSONArray actual = datajson.getJSONArray("actual"); 
     for(int i = 0; i < news.length(); i++){ 
      JSONObject c = news.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ID); 
      String title = c.getString(TAG_TITLE); 
      String story = c.getString(TAG_STORY); 
      String shorten = c.getString(TAG_SH_STORY); 
      String author = c.getString(TAG_AUTHOR); 
      String datetime = c.getString(TAG_DATETIME); 
      String img = c.getString(TAG_IMG); 
      String big_img = c.getString(TAG_BIG_IMG); 


      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // adding each child node to HashMap key => value 
      map.put(TAG_ID, id); 
      map.put(TAG_TITLE, title); 
      map.put(TAG_STORY, story); 
      map.put(TAG_IMG, img); 
      map.put(TAG_BIG_IMG, big_img); 
      map.put(TAG_DATETIME, datetime); 
      map.put(TAG_AUTHOR, author); 

      // adding HashList to ArrayList 
      homeList.add(map);} 
     for(int i = 0; i < actual.length(); i++){ 
      JSONObject c = actual.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ACT_TIME); 
      String body = c.getString(TAG_ACT_BODY); 
      String anews = " | "+ id+ " " + body; 
      String cur_anews = ((TextView) findViewById(R.id.scroller)).getText().toString(); 
      String complete = anews + cur_anews; 
      TextView anewstv = (TextView) findViewById(R.id.scroller); 
      anewstv.setText(complete); 

      } 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 






list=(ListView)findViewById(R.id.list); 

// Getting adapter by passing xml data ArrayList 
adapter=new LazyAdapter(this, homeList);   
list.setAdapter(adapter); 


// Click event for single list row 
list.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
     String cur_title = ((TextView) view.findViewById(R.id.title)).getText().toString(); 
     String cur_story = ((TextView) view.findViewById(R.id.einfo2)).getText().toString(); 
     String cur_author = ((TextView) view.findViewById(R.id.einfo1)).getText().toString(); 
     String cur_datetime = ((TextView) view.findViewById(R.id.tVdatetime)).getText().toString(); 
     String cur_actual = ((TextView) findViewById(R.id.scroller)).getText().toString(); 
     ImageView cur_img = (ImageView) view.findViewById(R.id.list_image); 
     String cur_img_url = (String) cur_img.getTag(); 

     Intent i = new Intent("com.example.androidhive.CURENTNEWS"); 
     i.putExtra("CUR_TITLE", cur_title); 
     i.putExtra("CUR_STORY", cur_story); 
     i.putExtra("CUR_AUTHOR", cur_author); 
     i.putExtra("CUR_DATETIME", cur_datetime); 
     i.putExtra("CUR_IMG_URL", cur_img_url); 
     i.putExtra("CUR_ACTUAL", cur_actual); 
     startActivity(i); 
    } 
}); 
} 

public void startNewActivity(){ 

} 
public class LoadingTask extends AsyncTask<String, Object, Object>{ 
    XMLParser parser = new XMLParser(); 
    JSONParser jParser = new JSONParser(); 
    LinearLayout content = (LinearLayout) findViewById(R.id.content); 
    LinearLayout refLayout = (LinearLayout) findViewById(R.id.refLayout); 

    protected void onPreExecute(){ 
     content.setClickable(false); 
     refLayout.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected Object doInBackground(String... params) { 
     // TODO Auto-generated method stub 


     String URL = params[0]; 
     JSONObject json = jParser.getJSONFromUrl(URL); 
     //String xml = parser.getXmlFromUrl(URL); // getting XML from URL 
     // getting DOM element 
     return json; 
    } 

    protected void onPostExecute(Object result){ 
     String json; 
     json = result.toString(); 
     reloadPage(json); 
     refLayout.setVisibility(View.GONE); 
    } 


} 



} 

Trả lời

18

Nếu tôi có quan điểm của bạn - bạn có thể đi với 2 cách tiếp cận:

  1. Thêm tiêu đềXem danh sách. Điều đó thật dễ dàng như tăng lượt xem của bạn và chuyển nó đến addHeaderView(View) trong Danh sách của bạn. Lưu ý: bạn phải thêm chế độ xem này trước khi đặt bộ điều hợp hoặc nó sẽ ném ngoại lệ.

  2. Tuy nhiên, vì 'tiêu đề' của bạn đại diện cho cùng một dữ liệu như tất cả các mục khác, nhưng có bố cục khác nhau - Tôi khuyên bạn không nên sử dụng Tiêu đề tại đây. Thay vào đó, hãy thử triển khai getItemViewType() trong bộ điều hợp của bạn. http://developer.android.com/reference/android/widget/BaseAdapter.html#getItemViewType(int) Nếu bạn làm - bạn sẽ có khả năng kiểm tra loại bố cục nào cần trả lại theo phương thức getView(). Và Android sẽ chăm sóc tối ưu hóa và sử dụng lại Chế độ xem tăng cao cho bạn, vì vậy bạn có thể chắc chắn rằng convertView, được chuyển đến getView của bạn sẽ thuộc loại và bố cục phù hợp.

Vui lòng cho tôi biết nếu tôi nên giải thích chi tiết hơn.

+0

bạn đã giải thích đủ :) thx –

0

Bạn có thể làm điều đó như thế này:

... 
convertView.setOnClickListener(new OnItemClick(position)); 
... 
public class OnItemClick implements OnClickListener { 
    private final int index; 
    public OnItemClick(int _index) { 
      this.index = _index; 
     } 
    @Override 
    public void onClick(View v) { 
     //dosomething 
    } 
} 
Các vấn đề liên quan