7

リストビューにデータを表示しているアプリがありますが、最初の行を異なるレイアウトで膨らませたいのですが、リストアイテムがたくさんあるので、リストビューを最適化したいのですが、問題があります。その方法でリストビューを埋めるときにリストビューを最適化することはできません。したがって、リストビューヘッダー内の最初の行に配置する必要があるコンテンツをレイアウトによって膨らませるにはどうすればよいですか。アダプターのコードは次のとおりです。

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. ただし、「ヘッダー」は他のすべてのアイテムと同じデータを表しますが、レイアウトが異なるため、ここではヘッダーを使用しないことをお勧めします。代わりに、アダプタに実装getItemViewType()してみてください。http://developer.android.com/reference/android/widget/BaseAdapter.html#getItemViewType(intgetView() )実行する場合は、メソッドで返すレイアウトのタイプを確認できます。また、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 に答える