1

アプリケーションに ListView があり、さまざまなタイミングでイベントが発生します。

私の ListView では、時間順に並べて左側に表示したいと考えています。

| 12:00 |   Event1
| 13:00 |   
| 14:00 |   Event2
| 15:00 |   Event2
| 16:00 |   Event3

そのようなもので、どこから始めるべきかについて誰か提案を提供できますか?

4

2 に答える 2

0

BaseAdapter を拡張する独自のアダプタを作成し、その上ですべての行に使用される特定のレイアウト ファイルを作成する必要があります。

があり、Map<String,String> mMap = new HashMap<String,String>その中にイベントがあり、別の位置にイベントの時間があるとしましょう。

次に、新しいアダプタを作成します。MyAdapter としましょう。

MyAdapter mAdapter = new MyAdapter(mMap);

メソッドを呼び出して、アダプターを ListView に追加します.setAdapter()

例えば。myListView.setAdapter(MyAdapter);

カスタム Adapter 内で、いくつかのメソッドを実装する必要があります。それらの 1 つですgetView()

HashMap<String,String>そこで、アダプターに渡したによって提供されたデータを解析する必要があります。row_layout.xml では、相対レイアウトを使用し、必要な情報を表示するための適切なテキスト フィールドを追加する必要があります。

それが役に立てば幸い!!!

このリンクもチェックしてください: http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/

于 2012-12-06T00:53:58.393 に答える
0

通常、リスト アダプターは、オブジェクトを格納するために何らかのデータ構造またはコンテナーを使用しています。新しい要素を追加する必要がある場合は、最初にコンテナに追加し、その要素を並べ替えてから呼び出します

adapter.notifyDataSetChanged();

データが変更され、更新する必要があることを知らせます。

これは、あなたを正しい方向に導くためのほんの一例です。お役に立てば幸いです。

ListActivity を定義します。

package com.myapp.listviewexample;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListViewExampleActivity extends ListActivity {

    static final String[] COUNTRIES = new String[] {
        "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
        "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
        "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan"
      };


    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      //setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
      final MyListAdapter adapter = new MyListAdapter(this, COUNTRIES);
      setListAdapter(adapter);

      ListView lv = getListView();
      //lv.setTextFilterEnabled(true);

      lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

            adapter.removeItem(position);
            adapter.notifyDataSetChanged();
          // When clicked, show a toast with the TextView text
          Toast.makeText(getApplicationContext(), ((TextView) view).getText() + " removed",
              Toast.LENGTH_SHORT).show();
        }
      });
    }

}

リスト アダプターを定義します。

package com.myapp.listviewexample;

import java.util.ArrayList;
import java.util.Arrays;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyListAdapter extends BaseAdapter {

    private ArrayList<String> items;
    private Context mContext;

    public MyListAdapter(Context c, String[] countries) {
        items = new ArrayList<String>(Arrays.asList(countries));
        mContext = c;
        Log.i("MyListAdapter", "countries.length == items.size() " + (countries.length == items.size()));
    }

    public int getCount() {
        return items.size();
    }

    public Object getItem(int position) {
        return items.get(position);
    }

    public long getItemId(int position) { 
        return position;
    }

    public void removeItem(int position) {
        items.remove(position);
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = li.inflate(R.layout.list_item, null);
        } else {
            view = convertView;
        }

        TextView tv = (TextView) view;//.findViewById(R.id.text_view_item);
        tv.setText(items.get(position));

        return view;
    }

}

ビューの不必要な膨張を避けるために、アダプターに ViewHolder パターンを使用することを検討してください。この投稿が役立つかもしれません: ArrayAdapter を ViewHolder パターンに従うようにするにはどうすればよいですか?

list_item.xml を定義する

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text_view_item"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp" >
</TextView>

必要に応じて、リスト要素に別の TextView を定義するだけです。addElement(..) メソッドでアダプターを拡張することを忘れないでください。このメソッドは要素を ArrayList に追加し (この場合)、Collections.sort(..) を使用して並べ替えます。Comparable を実装する必要がある 2 つの文字列のペアを使用することを検討してください。これにより、時間またはより洗練されたものに応じて並べ替えることができます。

于 2012-12-06T00:57:11.460 に答える