来自JSON的自定义列表视图

时间:2016-02-29 23:56:49

标签: android json listview

我想在ListView的一行中显示2个数据,但是我被卡住了。

我的问题出在showList()方法中。我不能使用我的自定义ListView XML来显示2个数据,我只能显示1个数据。我想在自定义ListView中显示itemitemsemail数组,而不仅仅是item

这是我的自定义ListView适配器代码...

private void getDosen() {
    //Ketika Aplikasi mengambil data kita akan melihat progress dialog
    final ProgressDialog loading = ProgressDialog.show(this,"Mengambil Data","Mohon tunggu..",false,false);
    //Logging Interceptor
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    //set Level Log
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    httpClient.addInterceptor(logging);

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ROOT_URL)
            .addConverterFactory(GsonConverterFactory.create())//GsonConverter untuk parsing json
            .client(httpClient.build())
            .build();

    RestAPI service = retrofit.create(RestAPI.class);

    Call<Model> call = service.loadListDosen();
    call.enqueue(new Callback<Model>() {  //Asyncronous Request
        @Override
        public void onResponse(Call<Model> call, Response<Model> response) {
            loading.dismiss();
            List<Listdosen> dosen = response.body().getListdosen();

            //memasukkan data dari varibel dosen ke dosens
            dosens = dosen;
            //memanggil method untuk menampilkan list
            showList();
        }

        @Override
        public void onFailure(Call<Model> call, Throwable t) {

        }
    });
}

private void showList() {
    //String array untuk menyimpan nama semua nama dosen
    String[] items = new String[dosens.size()];
    String[] itemsemail = new String[dosens.size()];

    for (int i = 0; i < dosens.size(); i++) {
        items[i] = dosens.get(i).getNama();
        itemsemail[i] = dosens.get(i).getEmail();

    }
    //Membuat Array Adapter for listview
    ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_dosen_listview, items);

    //setting adapter untuk listview

    listview.setAdapter(adapter);
}

1 个答案:

答案 0 :(得分:0)

首先,您需要一个适配器类,使用两个TextView来扩展布局,并将数据源绑定到该布局。

我已经创建了一个布局文件和你可以插入现有代码的适配器,我希望它适合你。

这是布局文件。

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

<TextView
    android:id="@+id/items"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:text="@string/app_name"
    android:layout_margin="16dp"/>

<TextView
    android:id="@+id/itemsEmail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/items"
    android:text="@string/app_name"
    android:layout_alignBaseline="@+id/items"/>

</RelativeLayout>

对于Adapter类,代码在

下面
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

public class MyBaseAdapter extends BaseAdapter {

private LayoutInflater layoutinflater;
private List<Listdosen> listStorage;
private Context context;

public MyBaseAdapter(Context context, List<Listdosen> customizedListView) {
    this.context = context;
    layoutinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    listStorage = customizedListView;
}

@Override
public int getCount() {
    return listStorage.size();
}

@Override
public Listdosen getItem(int position) {
    return listStorage.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder listViewHolder;
    if(convertView == null){
        listViewHolder = new ViewHolder();
        convertView = layoutinflater.inflate(R.layout.two_items, parent, false);
        listViewHolder.items = (TextView)convertView.findViewById(R.id.items);
        listViewHolder.itemEmail = (TextView)convertView.findViewById(R.id.itemsEmail);
        convertView.setTag(listViewHolder);
    }else{
        listViewHolder = (ViewHolder)convertView.getTag();
    }
    listViewHolder.items.setText(listStorage.get(position).getName());
    listViewHolder.itemEmail.setText(listStorage.get(position).getEmail());

    return convertView;
}

static class ViewHolder{
    TextView items;
    TextView itemEmail;
}
}

调整您的代码以适应更改。

showList() to showList(List<Listdosen> dosen)

而不是

ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_dosen_listview, items);

使用此

ArrayAdapter adapter = new ArrayAdapter<Listdosen>(this, dosen);