2012-09-02 5 views
8

나는 listview에서 데이터를 보여주는 애플 리케이션을 가지고 있지만 첫 번째 행은 다른 레이아웃에 의해 팽창되기를 원합니다. 그러나 나는 그렇게했는데, gona는 많은 수의 listitem을 가지기 때문에 listview를 최적화하고 싶습니다. 문제가있다. 그 방법에 스피 충전 목록보기, 그래서 내가 어떻게 어떤 레이아웃에 의해 팽창 목록보기 헤더 마녀 내부 주먹을 연속으로 가야 컨텐츠를 넣을 수 있습니다 때 내가 목록보기를 최적화 어차피 여기안드로이드 listview 헤더

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


} 



} 

답변

18

내가 가진 경우 어댑터의 코드 귀하의 요점 - 당신은 2 가지 접근 방식으로 갈 수 있습니다 :

  1. 목록에 headerView를 추가하십시오. 보기를 부 풀리면 목록의 addHeaderView(View)으로 전달하면됩니다. 참고 : 어댑터를 설정하기 전에이보기를 추가해야합니다. 그렇지 않으면 예외가 발생합니다.

  2. 그러나 '머리글'은 다른 모든 항목과 동일한 데이터를 나타내지 만 레이아웃이 다르므로 여기서 헤더를 사용하지 않는 것이 좋습니다. 대신 어댑터에 getItemViewType()을 구현하십시오. http://developer.android.com/reference/android/widget/BaseAdapter.html#getItemViewType(int) 하면 - getView() 방법으로 반환 할 레이아웃 유형을 확인할 수 있습니다. 그리고 Android는 비정상적인 조회수를 최적화하고 재사용 할 수 있으므로 getView에 전달 된 convertView은 올바른 유형 및 레이아웃이어야합니다.

자세한 내용을 알려 주시면 알려주세요.

+0

당신은 충분히 :) 들으을 설명 않았다 –

0

당신은 이런 식으로 작업을 수행 할 수 있습니다

... 
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 
    } 
}