【问题标题】:ListView OnClick with fillingListView OnClick 填充
【发布时间】:2015-04-19 20:53:01
【问题描述】:

我有点迷失从列表中填充 ListView。我可以用一个元素填充它,但我想从对象中获取三个元素,所以当我触摸每个元素时,应用程序会转到它包含的链接。在我的实际代码中,我只能显示标题

protected  void onPostExecute (Boolean result){

            List <String> title = new ArrayList<String>();
            List <String> link = new ArrayList<>();
            List <String> date = new ArrayList<>(); 
            for(int i=0;i<news.size();i++)
            {
                title.add(news.get(i).getTitle());
                link.add(news.get(i).getLink());
                date.add(news.get(i).getDate());
            }
            ArrayAdapter <String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,title);
            result.setAdapter(adapter);
            dialog.dismiss();
        }

arraylist datelink 中,我保存了正确的数据,但我只能使用其中一个。我的意图是将日期放在标题下方,当您触摸每个元素时,浏览器会打开并选择链接。

非常感谢。

编辑:我已经完成了自定义适配器,但它给了我一个错误。

 class CustomAdapter extends ArrayAdapter<whatsnew> {

            public CustomAdapter(Context context, whatsnew[] data) {
                super(context, R.layout.listitem, data);
            }

            public View getView(int position, View convertView, ViewGroup parent) {
                LayoutInflater inflater = LayoutInflater.from(getContext());
                View item = inflater.inflate(R.layout.listitem, null); //This give me a warning

                TextView lblTitle = (TextView)item.findViewById(R.id.lbltitle);
                lblTitle.setText(data[position].getTitle());

                TextView lbldate = (TextView)item.findViewById(R.id.lbldate);
                lbldate.setText(data[position].getFecha());

                return(item);

            }

        }
        CustomAdapter adaptader = new CuestomAdapter(getActivity(), data);
        result.setAdapter(adaptador);
        dialog.dismiss();

我的 Logcat 说:

Java NullPointerException: storage == null

解决方案是在公共 CustomAdapter 方法中通过“List data”更改“whatsnew[] data”,因为我在 ArrayList 中拥有名为 data 的所有数据。

【问题讨论】:

  • Custom Adapter for List View 的可能重复项
  • 不,只是我把代码放在这里,解决了。感谢您的建议。适配器工作正常并用元素标题填充 ListView。但我想将日期和链接添加到 ListView,这就是问题

标签: android listview android-arrayadapter


【解决方案1】:

不要使用字符串列表,更好的解决方案是使用一个独立的类来设置和获取这三个变量,让我们将这个类命名为(例如)数据:

public class Data{
private String title;
private String link;
private String date;
//define getters and setters here
}

然后在列表中使用数据类型的对象:

List <Data> data = new ArrayList<Data>();

您还必须制作一个扩展 Data 的自定义适配器:

public class ImageAdapter extends ArrayAdapter<Data>{



Context context;
    int layoutResourceId;   

ArrayList<Data> data=new ArrayList<Data>();
public ImageAdapter(Context YourClass, int layoutResourceId, ArrayList<Data> data) {
    super(YourClass, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = YourClass;
    this.data = data;
}




@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ImageHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new ImageHolder();
        holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
        holder.txtlink = (TextView)row.findViewById(R.id.txtTitle1);
        holder.txtDate = (TextView)row.findViewById(R.id.txtTitle1);
        row.setTag(holder);
    }
    else
    {
        holder = (ImageHolder)row.getTag();
    }

    Data d = data.get(position);
    holder.txtTitle.setText(d.getTitle());
    holder.txtLink.setText(d.getLink());
    holder.txtDate.setText(d.getDate());


   return row;

}

static class ImageHolder
{
    ImageView imgIcon;
    TextView txtTitle;
    TextView txtTitle1;

}


}

然后你创建这个:

ImageAdapter adapter1 = new TicketsImageAdapter(getActivity(),
                    R.layout.photo_list_adapter, data);

然后你将你的列表视图设置为这个适配器:

dataList.setAdapter(adapter1);

关于 NullPointerException: -首先你必须在你的 customAdapter 构造函数中初始化变量 -第二件事是您必须将列表视图布局和列表项分开,因此创建包含列表项的新 xml->tvTitle,tvLink,tvDate - 然后你必须做出一个条件,即 getView 不会像我在上面的代码中那样返回 View=null 希望这对你有用。 祝你好运

【讨论】:

  • 谢谢,但我的外部类已经有了名为 whatsnew 的数据定义。但我无法在 OnPostExecute 中制作自定义适配器。或者只是我不知道,所以我是时候阅读了
  • 如果它设置了标题,这意味着它在 onpost() 内部工作,但问题是你只是通过这一行给它标题:(getActivity(), android.R.layout.simple_list_item_1,title );所以制作一个自定义适配器可以解决这个问题。
  • 已编辑。我收到适配器错误...NullPointerException 并且看不到错误。谢谢
  • 您是否将自定义适配器设置为内部类?
  • NP T.c 顺便说一句,您可以接受答案,以便其他人从中受益。
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多