gpt4 book ai didi

Android - 扩充 ListView

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:48 25 4
gpt4 key购买 nike

我正在尝试填充一个 ListView ,其中每一行都有 2 个 TextView 和一个按钮。我想我几乎让它正常工作,但现在 ListView 只显示 ListView 中的 1 个项目并忽略其他数据。我还有 2 个 xml 文件(shelfrow.xml(2 个文本字段,1 个按钮)和 shelflist.xml(包含 ListView ))。这是我的 Shelf.java 类的核心代码。 (MyListItemModel 是一个存放每本书的类)

List<MyItemModel> myListModel = new ArrayList<MyItemModel>();
try{
JSONArray entries = json.getJSONArray("entries");
for(int i=0;i<entries.length();i++){                        
MyItemModel item = new MyItemModel();    
JSONObject e = entries.getJSONObject(i);
alKey.add(e.getInt("key"));
item.id = i;
item.title = e.getString("title");
item.description = e.getString("description");

myListModel.add(item);
}

}catch(JSONException e)        {
Log.e("log_tag", "Error parsing data "+e.toString());
}
//THIS IS THE PROBLEM I THINK - ERROR: The method inflate(int, ViewGroup) in the type LayoutInflater is not applicable for the arguments (int,Shelf)
MyListAdapter adapter = new MyListAdapter(getLayoutInflater().inflate(R.layout.shelfrow,this));

adapter.setModel(myListModel);
setListAdapter(adapter);
lv = getListView();
lv.setTextFilterEnabled(true);

和我的类 MyListAdapter 中的一些代码

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

if(convertView==null){
convertView = renderer;

}
MyListItemModel item = items.get(position);
// replace those R.ids by the ones inside your custom list_item layout.
TextView label = (TextView)convertView.findViewById(R.id.item_title);
label.setText(item.getTitle());
TextView label2 = (TextView)convertView.findViewById(R.id.item_subtitle);
label2.setText(item.getDescription());
Button button = (Button)convertView.findViewById(R.id.btn_download);
button.setOnClickListener(item.listener);
//}
return convertView;
}

最佳答案

这是因为您在创建 Adapter 时膨胀了 View。由于您只创建了一次 Adapter,因此您只需要填充一个 ViewView 需要为 ListView 中的每个可见行扩充。

不是将膨胀的View 传递给MyListAdapter 的构造函数:

MyListAdapter adapter = new MyListAdapter(getLayoutInflater().inflate(R.layout.shelfrow,this));

...

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

if(convertView == null) {
convertView = renderer;
}
...
}

你这个:

// Remove the constructor you created that takes a View.
MyListAdapter adapter = new MyListAdapter();

...

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

if(convertView == null) {
// Inflate a new View every time a new row requires one.
convertView = LayoutInflater.from(context).inflate(R.layout.shelfrow, parent, false);
}
...
}

关于Android - 扩充 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com