7

我有一个在列表视图中显示数据的应用程序,但我希望第一行被不同的布局膨胀,我这样做了,但由于列表项数量很大,我想优化列表视图并且存在问题。当我以这种方式填充 listview 时,我无法优化 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);
    }


}



}
4

2 回答 2

18

如果我明白你的意思 - 你可以采用 2 种方法:

  1. 将 headerView 添加到列表中。这就像膨胀您的视图并将其传递给 addHeaderView(View) 您的列表一样简单。注意:必须在设置适配器之前添加这个视图,否则会抛出异常。

  2. 但是,由于您的“标题”代表与所有其他项目相同的数据,但布局不同 - 我建议不要在这里使用 Header。相反,请尝试getItemViewType()在您的适配器中实现。http://developer.android.com/reference/android/widget/BaseAdapter.html#getItemViewType(int ) 如果你愿意 - 你将能够检查在getView()方法中返回哪种类型的布局。Android 会为你优化和重用你的膨胀视图,所以你可以确定convertView,传递给你的getView将是正确的类型和布局。

如果我应该解释更多细节,请告诉我。

于 2012-09-02T10:13:49.743 回答
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
   }
}
于 2015-01-23T10:46:17.730 回答