android - ListView 的自定义基础适配器

标签 android listview arraylist baseadapter getview

我尝试了很多不同的教程试图让它工作我想知道我的机器是否有问题.. 这是我的 MainActivity,我在其中创建 myadapter 并将其设置为 ListView。

public class MainActivity extends Activity {

UserRepo userRepo;
ArrayList<user> userList;
ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    list = (ListView) findViewById(R.id.listView);
    userRepo = new UserRepo();
    userList = userRepo.getUserArrayList();
    UserAdapter myadapter = new UserAdapter(this, userList );
    list.setAdapter(myadapter);
}

}

这是我的自定义用户类。

public class user {

String name;
String description;


public user(String name, String description) {
    this.name = name;
    this.description = description;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}
}

这是我的自定义 UserAdapter。我从很多不同的教程中尝试了很多不同的版本,但无论我做什么,我都无法让它与我传递的 ArrayList 一起工作。

public class UserAdapter extends BaseAdapter {


ArrayList<user> list;
Context context;
LayoutInflater mInflater;

public UserAdapter(Context c, ArrayList<user> list)
{
    context = c;
    this.list = list;
    mInflater = LayoutInflater.from(this.context);

}

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

@Override
public Object getItem(int position) {
    return list.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    MyViewHolder mViewHolder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.rowlayout, parent, false);
        mViewHolder = new MyViewHolder(convertView);
        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (MyViewHolder) convertView.getTag();
    }

    user currentListData = (user) getItem(position);

    mViewHolder.tv_name.setText(currentListData.getName());
    mViewHolder.tv_description.setText(currentListData.getDescription());


    return convertView;
}

private class MyViewHolder {
    TextView tv_name, tv_description;


    public MyViewHolder(View item) {
        tv_name = (TextView) item.findViewById(R.id.tv_name);
        tv_description = (TextView) item.findViewById(R.id.tv_description);

    }
}
}

这是我的 UserRepo,我在其中创建 ArrayList 并有一个方法可用于创建它并返回一个。

public class UserRepo {
ArrayList<user> list;

public ArrayList<user> getUserArrayList(){
    user john = new user("John", "Samoan Flatmate");
    list.add(john);
    user ariki = new user ("Ariki", "Māori Flatmate");
    list.add(ariki);
    user dion = new user ("Dion", "Asian Flatemate");
    list.add(dion);

    return list;
}
}

这是我的 list 文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.petakirikiri.customlistview">
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

最佳答案

UserRepo里面你永远不会初始化的类ArrayList<user> list .更改代码以对其进行初始化。

public class UserRepo {
    ArrayList<user> list = new ArrayList<>();
    // The rest of your code
}

关于android - ListView 的自定义基础适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36563010/

相关文章:

android - 在单独的线程上使用 HandlerThread 和 Handler 会卡住 UI 线程

android - 使用 Jetpack 的 EncryptedSharedPreferences 和 EncryptedFile 有什么好处?

Android 线程和 ArrayAdapter

Java:创建一个 HashMap 列表

java - for 循环忽略了 ArrayList 数据集中的几个索引

android - 为 MapView 中点击的 OverlayItems 创建自定义弹出窗口

java - 从其他 fragment 控制蓝牙

c# - 在嵌套 ListView 中访问父数据项

android - ListView:滚动时重置内容导致异常

java - 将类中的所有静态变量放入数组/列表