我正在做一个Android项目,我想用XML布局填充一个列表视图项。该布局由图像文本框和TextView组成。我该怎么做?
0pizxfdo1#
您需要为对象创建模型,然后创建一个自定义的ArrayAdapter类型模型,如下所示
public class MyAdapter extends ArrayAdapter<MyModel> { public MyAdapter(Context context, ArrayList<MyModel> objects) { super(context, 0, objects); } @Override public View getView(int position, View view, ViewGroup viewGroup) { ViewHolder viewHolder; if (view == null) { view = LayoutInflater.from(getContext()).inflate(R.layout.Your_xml_layout, viewGroup, false); viewHolder = new ViewHolder(); viewHolder.textView = (TextView) view.findViewById(R.id.Your_TextView_id); viewHolder.imageView = (ImageView) view.findViewById(R.id.Your_ImageView_id); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } MyModel myModel = getItem(position); viewHolder.textView.setText(myModel.getter_for_textView); viewHolder.imageView // Load your image to the imageView return view; } static class ViewHolder { TextView textView; ImageView imageView; } }
在主Activity中,获取listView的引用,创建适配器的对象并在listView上设置适配器。
6mzjoqzu2#
尝试这种方式,您需要创建自定义适配器
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" > </ListView> </RelativeLayout>
listitem
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/img" android:layout_width="50dp" android:layout_height="50dp"/> <TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="50dp" /> </LinearLayout >
适配器
import android.app.Activity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class CustomList extends ArrayAdapter<String>{ private final Activity context; private final String[] web; private final Integer[] imageId; public CustomList(Activity context, String[] web, Integer[] imageId) { super(context, R.layout.list_single, web); this.context = context; this.web = web; this.imageId = imageId; } @Override public View getView(int position, View view, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); View rowView= inflater.inflate(R.layout.list_single, null, true); TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); ImageView imageView = (ImageView) rowView.findViewById(R.id.img); txtTitle.setText(web[position]); imageView.setImageResource(imageId[position]); return rowView; } }
MainActivity
public class MainActivity extends Activity { ListView list; String[] web = { "Google Plus", "Twitter", "Windows", "Bing", "Itunes", "Wordpress", "Drupal" } ; Integer[] imageId = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5, R.drawable.image6, R.drawable.image7 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); CustomList adapter = new CustomList(MainActivity.this, web, imageId); list=(ListView)findViewById(R.id.list); list.setAdapter(adapter); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); } }); } }
2条答案
按热度按时间0pizxfdo1#
您需要为对象创建模型,然后创建一个自定义的ArrayAdapter类型模型,如下所示
在主Activity中,获取listView的引用,创建适配器的对象并在listView上设置适配器。
6mzjoqzu2#
尝试这种方式,您需要创建自定义适配器
listitem
适配器
MainActivity