Android 如何使用listview布局文件中的id?
我有三门课:Android 如何使用listview布局文件中的id?,android,android-layout,listview,Android,Android Layout,Listview,我有三门课: 主要活动 电影片段 图像适配器 片段XML布局文件包含一个ListView。listview有一个不同的布局文件,我用它来设计每个电影在列表中的显示方式。如海报和标题 MoviesFragment从API获取电影海报的URL,并将其放入ArrayList 此HashMap被传递到ImageAdapter,该适配器说明如何填充ListView 海报图像已从ImageAdapter类设置为ImageView,但找不到id 图像适配器: public class ImageAdapt
- 主要活动
- 电影片段
- 图像适配器
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<HashMap<String, String>> array;
private int width;
public ImageAdapter(Context context, ArrayList<HashMap<String, String>> paths, int x) {
mContext = context;
array = paths;
width = x;
}
@Override
public int getCount() {
return array.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
} else {
imageView = (ImageView) convertView;
}
Drawable d = resizeDrawable(mContext.getResources().getDrawable(R.drawable.place_holder_img));
Picasso.with(mContext).load("http://image.tmdb.org/t/p/w185" + array.get(position)).resize(width, (int) (width * 1.5)).placeholder(d).into(imageView);
return imageView;
}
private Drawable resizeDrawable(Drawable image) {
Bitmap b = ((BitmapDrawable) image).getBitmap();
Bitmap bitmapResized = Bitmap.createScaledBitmap(b, width, (int) (width * 1.5), false);
return new BitmapDrawable(mContext.getResources(), bitmapResized);
}
}
public class MoviesFragment extends Fragment {
static int width;
static ArrayList<HashMap<String, String>> posters;
static ListView listView;
static boolean sortByPop;
public MoviesFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
if (MainActivity.TABLET) {
width = size.x / 6;
} else width = size.x / 3;
listView = (ListView) rootView.findViewById(R.id.lvMovies);
//if fragment is visible
if (getActivity() != null) {
}
//handles listView item click
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println(posters.get(position));
}
});
return rootView;
}
@Override
public void onStart() {
super.onStart();
getActivity().setTitle("Most Popular Movies");
if (isNetworkAvailable()) {
listView.setVisibility(ListView.VISIBLE);
new ImageLoadTask().execute();
} else {
TextView textView = new TextView(getActivity());
RelativeLayout layout = (RelativeLayout)
getActivity().findViewById(R.id.relativelayout);
textView.setText("You are not connected to the internet!");
if (layout.getChildCount() == 1) {
layout.addView(textView);
}
listView.setVisibility(ListView.GONE);
}
}
public boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
private class ImageLoadTask extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>> {
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
while (true) {
try {
//generates the amount of inputs
String[] array = new String[]{"1", "2", "3", "5"};
posters = new ArrayList<>(getPathFromAPI(array, sortByPop));
return posters;
} catch (Exception e) {
continue;
}
}
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
if (result != null && getActivity() != null) {
//puts the images into the imageviews
ImageAdapter adapter = new ImageAdapter(getActivity(), result, width);
listView.setAdapter(adapter);
}
}
ArrayList<HashMap<String, String>> getPathFromAPI(String[] movieID, boolean sort) {
//gets movies and puts them into the posters arrayList
posters = new ArrayList<>();
for (String aMovieID : movieID) {
HashMap<String, String> map = new HashMap<>();
map.put("id", "/kqjL17yufvn9OVLyXYpvtyrFfak.jpg");
posters.add(map);
}
return posters;
}
}
public class MainActivity extends AppCompatActivity {
public static boolean TABLET = false;
public boolean isTablet(Context context) {
boolean xlarge = ((context.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
boolean large = ((context.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
return (xlarge || large);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.relativelayout, new MoviesFragment())
.commit();
}
}
}
<?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"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView android:id="@+id/ivPosters"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/results_layout_tv_movie_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingBottom="10dp"
android:paddingLeft="20dp"
android:paddingStart="20dp"
android:paddingTop="10dp"
android:text="hellow"
android:textColor="#000"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
ListView布局的XML:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<HashMap<String, String>> array;
private int width;
public ImageAdapter(Context context, ArrayList<HashMap<String, String>> paths, int x) {
mContext = context;
array = paths;
width = x;
}
@Override
public int getCount() {
return array.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
} else {
imageView = (ImageView) convertView;
}
Drawable d = resizeDrawable(mContext.getResources().getDrawable(R.drawable.place_holder_img));
Picasso.with(mContext).load("http://image.tmdb.org/t/p/w185" + array.get(position)).resize(width, (int) (width * 1.5)).placeholder(d).into(imageView);
return imageView;
}
private Drawable resizeDrawable(Drawable image) {
Bitmap b = ((BitmapDrawable) image).getBitmap();
Bitmap bitmapResized = Bitmap.createScaledBitmap(b, width, (int) (width * 1.5), false);
return new BitmapDrawable(mContext.getResources(), bitmapResized);
}
}
public class MoviesFragment extends Fragment {
static int width;
static ArrayList<HashMap<String, String>> posters;
static ListView listView;
static boolean sortByPop;
public MoviesFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
if (MainActivity.TABLET) {
width = size.x / 6;
} else width = size.x / 3;
listView = (ListView) rootView.findViewById(R.id.lvMovies);
//if fragment is visible
if (getActivity() != null) {
}
//handles listView item click
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println(posters.get(position));
}
});
return rootView;
}
@Override
public void onStart() {
super.onStart();
getActivity().setTitle("Most Popular Movies");
if (isNetworkAvailable()) {
listView.setVisibility(ListView.VISIBLE);
new ImageLoadTask().execute();
} else {
TextView textView = new TextView(getActivity());
RelativeLayout layout = (RelativeLayout)
getActivity().findViewById(R.id.relativelayout);
textView.setText("You are not connected to the internet!");
if (layout.getChildCount() == 1) {
layout.addView(textView);
}
listView.setVisibility(ListView.GONE);
}
}
public boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
private class ImageLoadTask extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>> {
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
while (true) {
try {
//generates the amount of inputs
String[] array = new String[]{"1", "2", "3", "5"};
posters = new ArrayList<>(getPathFromAPI(array, sortByPop));
return posters;
} catch (Exception e) {
continue;
}
}
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
if (result != null && getActivity() != null) {
//puts the images into the imageviews
ImageAdapter adapter = new ImageAdapter(getActivity(), result, width);
listView.setAdapter(adapter);
}
}
ArrayList<HashMap<String, String>> getPathFromAPI(String[] movieID, boolean sort) {
//gets movies and puts them into the posters arrayList
posters = new ArrayList<>();
for (String aMovieID : movieID) {
HashMap<String, String> map = new HashMap<>();
map.put("id", "/kqjL17yufvn9OVLyXYpvtyrFfak.jpg");
posters.add(map);
}
return posters;
}
}
public class MainActivity extends AppCompatActivity {
public static boolean TABLET = false;
public boolean isTablet(Context context) {
boolean xlarge = ((context.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
boolean large = ((context.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
return (xlarge || large);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.relativelayout, new MoviesFragment())
.commit();
}
}
}
<?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"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView android:id="@+id/ivPosters"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/results_layout_tv_movie_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingBottom="10dp"
android:paddingLeft="20dp"
android:paddingStart="20dp"
android:paddingTop="10dp"
android:text="hellow"
android:textColor="#000"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
检查您的ImageAdapter
@Override public View getView(int-position,View-convertView,ViewGroup-parent){}
您应该膨胀布局并查找id。
就这样,
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
view = View.inflate(context, R.layout.yourlayout, null);
tv = (TextView) view.findViewById(R.id.tv);
iv = (ImageView) view.findViewById(R.id.iv);
}
您希望使用适配器构建整行 成功了。某种程度上。getview中的行必须进入if语句,该语句检查view是否为null。如果它创建了元素EAH,我就忘了。如果(view==null){},确实需要