【问题标题】:Create a custom adapter from simple listview code从简单的列表视图代码创建自定义适配器
【发布时间】:2014-06-11 13:06:05
【问题描述】:

我需要为列表视图创建一个自定义适配器,但我不明白怎么做。实际上它适用于我的工作,但只需使用一个列表视图,其中包含列表的默认 android 布局内的所有对象。我需要“分离”创建custom adapter 的对象。这是实际的代码:

private static class SoluzioniLoader extends AsyncTaskLoader<List<Soluzione>> {

    private FermataComune partenza;
    private FermataComune arrivo;
    private String data;

    public SoluzioniLoader(Context context, FermataComune partenza, FermataComune arrivo, String data) {
      super(context);
      this.partenza = partenza;
      this.arrivo = arrivo;
      this.data = data;
    }

    @Override
    public List<Soluzione> loadInBackground() {

    try {

      List<Soluzione> soluzioni = Client.cercaCorseAndata(partenza, arrivo, data);
      return soluzioni;
    } catch (IOException e) {
      e.printStackTrace();
      return null;
    }

    }
}

private LoaderCallbacks<List<Soluzione>> mLoaderCallbacks = new LoaderCallbacks<List<Soluzione>>() {
    private ProgressDialog pd;
    @Override
    public Loader<List<Soluzione>> onCreateLoader(int id, Bundle args) {
    pd = new ProgressDialog(SoluzioniActivity.this);
    pd.setTitle("Caricamento Soluzioni Trovate");
    pd.setMessage("Attendi...");
    pd.setIndeterminate(false);
    pd.show();

    return new SoluzioniLoader(SoluzioniActivity.this, partenza, arrivo, data);
}

@Override
public void onLoadFinished(Loader<List<Soluzione>> loader, List<Soluzione> data) {
    try {
    pd.dismiss();
     } catch(Exception e){  
    }

    if (data == null) {
    // ERRORE
    } else {
    mListView.setAdapter(new ArrayAdapter<Soluzione>(SoluzioniActivity.this, android.r.layout.simple_list_item_1, data));
}

我已经为行创建了布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
 >


    <TextView 
    android:id="@+id/fromhour"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="30sp"
    />

    <TextView 
    android:id="@+id/from"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    />

    <TextView 
    android:id="@+id/tohour"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    />

    <TextView 
    android:id="@+id/to"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    />

</LinearLayout>

任何帮助我如何在这里创建和集成自定义适配器?谢谢

【问题讨论】:

    标签: java android android-listview custom-adapter


    【解决方案1】:

    试试下面的代码:

    //声明你的自定义适配器:

    private EfficientAdapter adapter;
    

    在 onCreate() 中初始化它:

    adapter = new EfficientAdapter(this);
    

    然后设置你的列表适配器,

    your_listview.setAdapter(adapter);
    

    //你的适配器代码:

    private class EfficientAdapter extends BaseAdapter {
    
            private LayoutInflater mInflater;
            private Context context;
            private Bitmap imageBitmap = null;
    
            public EfficientAdapter(Context context) {
                mInflater = LayoutInflater.from(context);
                this.context = context;
            }
    
            @Override
            public int getCount() {
                return YOUR_ARRAY.size();
            }
    
            @Override
            public Object getItem(int arg0) {
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                return 0;
            }
    
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
    
                final ViewHolder holder;
    
                if (convertView == null) {
                    convertView = mInflater.inflate(R.layout.featured_item, null);
                    holder = new ViewHolder();
                    holder.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle);
                    holder.txtAuthorName = (TextView) convertView.findViewById(R.id.txtAuthorName);
                    holder.txtDescription = (TextView) convertView.findViewById(R.id.txtDescription);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }
    
                holder.txtTitle.setText(data.get(position).get("article_title"));
                holder.txtAuthorName.setText(data.get(position).get("author_name"));
                holder.txtDescription.setText(data.get(position).get("article_text"));
    
                return convertView;
            }
    
            class ViewHolder {
    //YOUR ATTRUBUTES TO DISPLAY IN LIST DECLARE HERE
                TextView txtTitle;
                TextView txtAuthorName;
                TextView txtDescription;
            }
    
        }
    

    【讨论】:

    • 我需要了解如何将您的代码集成到我的代码中 :( 这是完美的,感谢您的回答..所以,我需要创建适配器,但使用正确的文本视图,然后?在我的我有:this.partenza = partenza; this.arrivo = arrivo; this.data = data; 那是我的对象.. 我发布的代码.. 我需要重新编写吗?
    • 只需创建一个数组列表或数据数组,然后替换您的值以在 textviews 中挖掘,使用您的 texuviews ,就是这样,请接受并投票赞成答案。
    • 我正在尝试..我会告诉你我是否会做正确的:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多