【问题标题】:Custom Base Adapter to ListView自定义基础适配器到 ListView
【发布时间】:2016-08-02 11:02:39
【问题描述】:

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

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;
}
}

这是我的清单文件

<?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>

【问题讨论】:

  • 你永远不会说真正的问题是什么!应用程序崩溃了吗?如果是这样,请从 logcat 添加堆栈跟踪。最初看起来不合适的一件事是,我看不到您将ArrayList&lt;user&gt; list 分配给UserRepoArrayList 的新实例的位置。
  • 是的,它确实崩溃了,抱歉,我不知道我在 logcat 上的意思。原因:com.example.petakirikiri.customlistview.MainActivity.onCreate(MainActivity.java:23) 的 com.example.petakirikiri.customlistview.UserRepo.getUserArrayList(UserRepo.java:13) 的 java.lang.NullPointerException
  • 谢谢乔治穆里根,你是对的。过去两天我一直在这里拉头发,帮了大忙。猜猜这就是旅程的一部分……

标签: android listview arraylist baseadapter getview


【解决方案1】:

UserRepo 类中,您永远不会初始化ArrayList&lt;user&gt; list。更改代码以对其进行初始化。

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

【讨论】:

  • 再次感谢您的宝贵时间。这已经毁了我两天了,这只是那一行简单的代码:(
  • 不客气。随着您变得更有经验,您将确切地知道堆栈跟踪试图告诉您什么以及如何修复它。
【解决方案2】:

你应该创建一个 ArrayList 的实例

public class UserRepo {
    ArrayList<user> list;

    public ArrayList<user> getUserArrayList(){
    list = new ArrayList<>();
    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;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多