今天我有一个我想知道的问题。 让我们说我有一个列表视图,它只显示一个文本列表。 listview布局是一个只包含Textview的简单列表视图。
现在,当我显示结果时,第一个视图,我要显示的是一个文本视图,让我们说图像(我认为布局应该在这里改变)。之后,它将显示常规textview。 你会看到,在新闻等应用中,他们会显示带有大图片和文字的第一个新闻,而列表的其余部分只显示文本。 你能给我一些想法吗?或者我必须分开吗?
谢谢。 我的简单适配器 - >
@Override
public void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
// Updating parsed JSON data into ListView
ListAdapter adapter = new SimpleAdapter(getActivity(), postList, R.layout.list_item,
new String[] { POST_TITLE,POST_CONTENT, GUID },
new int[] {R.id.email, R.id.mobile, R.id.guid });
newsList.setAdapter(adapter);
}
答案 0 :(得分:1)
我会将imageView
和textView
放在列表项布局中。然后,如果有可用的图像,我设置imageView.setVisibility(View.Visible)
。如果没有图片imageView.setVisibility(View.Gone)
。
这是下面的旧代码,它使用Cursor
和一些弃用的方法。您可以使用自己的方式更改适配器以使用Cursor
,也可以使用List
,Array
将项目存储在ListView
中。检查我如何在imageView
内充气textView
和adapter
。
public class Home_fragment extends Fragment{
ChannelAdapter adapter;
private ListView mListView;
Cursor cursor;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
View view = inflater.inflate(R.layout.home_fragment, null);
mListView = (ListView) view.findViewById(R.id.list);
cursor = ((CounterPP) getActivity().getApplication()).addList.query();
getActivity().startManagingCursor(cursor);
adapter = new ChannelAdapter(getActivity(), R.layout.list_item, cursor, FROM, TO);
mListView.setAdapter(adapter);
....
}
static class ViewHolderItem {
TextView textHere;
ImageView imageHere;
}
// You can extend ArrayAdapter for your own adapter implementation
public class ChannelAdapter extends SimpleCursorAdapter {
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolderItem viewHolder;
if(convertView==null){
LayoutInflater inflater =(LayoutInflater)getActivity().getApplicationContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
//R.layout.list_item xml has imageView and textView
convertView = inflater.inflate(R.layout.list_item, parent, false);
viewHolder = new ViewHolderItem();
viewHolder.textHere = (TextView) convertView.findViewById(R.id.textNew);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageNew);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolderItem) convertView.getTag();
}
if(you have image to show){
viewHolder.imageHere.setVisible(View.VISIBLE);
viewHolder.textHere.setText("Text From your List");
viewHolder.imageHere.setDrawable(your image here);
}else{
viewHolder.imageHere.setVisible(View.GONE);
viewHolder.textHere.setText("Text From your List");
}
return convertView;
}
此代码可能无法正常运行,但它提供了这个想法。
答案 1 :(得分:0)
以上要求可以根据您的选择以多种方式实现:
1)将项目0视为单独的视图,其余视图为seaprately。 将所有项目从项目1传递到listview适配器中的项目N. 将项目0作为单独的视图膨胀,并将其添加为列表视图的标题。
优点: (1)您可以单独为项目0和其余视图完全填充不同的视图。同时您可以充分利用listview的视图可重用性功能。 (2)如果您尝试使用onItemClickListener来确定单击操作,请单击Header以及可以直接在单个点接收列表项。
缺点: (1)通过这种方式,您可以有效地仅在顶部或底部添加突出显示的视图,但如果需求在将来发生变化,则无处在中间。
2)您可以在模型类中使用唯一标识符来检测需要在突出显示/不同视图中显示的对象。然后在适配器中,您可以为突出显示和未突出显示的不同项目使用2个单独的布局。
优点: (1)随着时间的推移,您可以在列表中的任何位置添加突出显示的项目,而不仅仅是第0项。
缺点: (1)您无法在getView()中通过ViewHolder使用视图可重用性功能,并且每次都需要根据决策逻辑对不同的视图进行扩充。
我建议您现在使用方法1,如果将来需求发生变化,请切换到方法2。
答案 2 :(得分:0)
public View getView(int position, View convertView, ViewGroup Parent){
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item,null);
}
TextView thisview = (TextView) convertView.findViewById(R.id.email);
int getListPos = newsList.getFirstVisiblePosition();
//i set the count starting 0 and saved in the hashmap array
//to compare the first result with the first position of listview
int count = Integer.parseInt(objects.get(position).get("ListCount"));
if(getListPos == count) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_header,null);
TextView HeaderText = (TextView) convertView.findViewById(R.id.headertext);
TextView HeaderContent = (TextView) convertView.findViewById(R.id.headercontent);
HeaderText.setText(objects.get(position).get(POST_TITLE));
HeaderContent.setText(objects.get(position).get(POST_CONTENT));
}else{
thisview.setText("Normal line");
}
return convertView;
}