Android列表适配器,每个列表项中都有一个数组列表

Android列表适配器,每个列表项中都有一个数组列表,android,json,listview,listadapter,Android,Json,Listview,Listadapter,我想创建一个自定义列表适配器,该适配器由使用volley的json数组填充,但我想在每个列表项中放置一个可单击的项目列表。下面是我想用来填充列表的json示例 [ { "name": "Hopewell Mutanda", "answer": "This is my answer", "votes": 10, "date": 20-06-2014, "comments": [ { "

我想创建一个自定义列表适配器,该适配器由使用volley的json数组填充,但我想在每个列表项中放置一个可单击的项目列表。下面是我想用来填充列表的json示例

[
{
    "name": "Hopewell Mutanda",
    "answer": "This is my answer",
    "votes": 10,
    "date": 20-06-2014,
    "comments": [
                 {
                    "comment": "This is a great answer",
                    "name": "Gloria Nyakudya",
                    "date": 21-10-2014,
                    "vote": 20,
                 },
                ]
},
]

下面是我最终的预期,但我是手动布局的。我想用一个适配器。请注意,注释列表也有自己的xml资源和两个不同的文本视图。评论应该是可点击的

我的问题是如何修改自定义适配器以满足这些要求。我将使用一个与此类似的适配器,只需对名称进行一些更改

private  class EfficientAdapter extends BaseAdapter {

   private LayoutInflater mInflater;

   public EfficientAdapter(Context context) {
       mInflater = LayoutInflater.from(context);
   }

   public int getCount() {
       return mDataList.size();
   }

   public Object getItem(int position) {
       return position;
   }

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

   public View getView(final int position, View convertView, ViewGroup parent) {
       ViewHolder holder;

       if (convertView == null) {
           convertView = mInflater.inflate(R.layout.feed_list_item, null);
           holder = new ViewHolder();

        mFeedImage = (ImageView) convertView.findViewById(R.id.feed_image);
            mFeedImageAuthor = (ImageView) convertView.findViewById(R.id.feed_image_image_author);
            mFeedTitle = (TextView) convertView.findViewById(R.id.feed_title);
            mFeedDate = (TextView) convertView.findViewById(R.id.feed_date);
            mFeedAuthor = (TextView) convertView.findViewById(R.id.feed_author);
            mFeedTag = (TextView) convertView.findViewById(R.id.feed_tag);

           convertView.setTag(holder);
       } else {
           holder = (ViewHolder) convertView.getTag();
       }

       Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/RobotoSlab-Light.ttf");
       mFeedTitle.setTypeface(custom_font);
       holder.mFeedTitle.setText(mDataList.get(position).getsFeedTitle());
       holder.mFeedDate.setText(mDataList.get(position).getsFeedDate()) ;
       holder.mFeedAuthor.setText(mDataList.get(position).getsFeedAuthor()) ;
       holder.mFeedTag.setText(mDataList.get(position).getsFeedTag()) ;


       mListView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub

                  }
                        });

       return convertView;

            }
   class ViewHolder {
       TextView mFeedTitle, mFeedDate, mFeedAuthor, mFeedTag;
       ImageView mFeedImage, mFeedImageAuthor;

   }    

}
私有类EfficientAdapter扩展BaseAdapter{
私人停车场;
公共效率适配器(上下文){
mInflater=LayoutInflater.from(上下文);
}
public int getCount(){
返回mDataList.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=mInflater.充气(R.layout.feed\u list\u项,空);
holder=新的ViewHolder();
mFeedImage=(ImageView)convertView.findViewById(R.id.feed_image);
mFeedImageAuthor=(ImageView)convertView.findViewById(R.id.feed\u image\u image\u author);
mFeedTitle=(TextView)convertView.findViewById(R.id.feed\u title);
mFeedDate=(TextView)convertView.findViewById(R.id.feed_date);
mFeedAuthor=(TextView)convertView.findViewById(R.id.feed\u author);
mFeedTag=(TextView)convertView.findViewById(R.id.feed_标记);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
Typeface custom_font=Typeface.createFromAsset(getActivity().getAssets(),“fonts/robotosab Light.ttf”);
mFeedTitle.setTypeface(自定义字体);
holder.mFeedTitle.setText(mDataList.get(position.getsFeedTitle());
holder.mFeedDate.setText(mDataList.get(position.getsFeedDate());
holder.mFeedAuthor.setText(mDataList.get(position.getsFeedAuthor());
holder.mFeedTag.setText(mDataList.get(position.getsFeedTag());
mListView.setOnItemClickListener(新的android.widget.AdapterView.OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
}
});
返回视图;
}
类视图持有者{
TextView mFeedTitle、mFeedDate、mFeedAuthor、mFeedTag;
ImageView mFeedImage、mFeedImageAuthor;
}    
}

我认为单个listview项目不可能有多个可单击区域。类似这样的列表可以类似于分段列表的工作方式

你可以试试类似的东西


一个更复杂的版本应该可以完成你想要做的,除非我误解了你的意图,但是有了这个,你应该能够定义2个或3个或更多不同的行布局,并按照你的意愿对它们进行排序。

但是我想在每个列表项中放置一个项目列表,这些项目是可点击的
-你能解释一下你是如何精确地可视化列表的吗?我也很困惑。mListView是此适配器提供视图的列表吗?或者,您是否希望将ListView放在一个列表项中(并放在支架中)。列表中的列表似乎是个坏主意。你确定你需要吗?你能计算一下这个项目有多少评论,然后在他们点击一个项目时有一个单独的详细信息视图吗?伙计们,请检查我的编辑并点击链接。我认为这可能有助于解释我想要实现的目标。可能不可能有嵌套的ListView,但可能有使用addview填充的linearlayout。如果你看看android stackachange应用程序