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

我有三门课:

  • 主要活动
  • 电影片段
  • 图像适配器
片段XML布局文件包含一个ListView。listview有一个不同的布局文件,我用它来设计每个电影在列表中的显示方式。如海报和标题

MoviesFragment从API获取电影海报的URL,并将其放入ArrayList

此HashMap被传递到ImageAdapter,该适配器说明如何填充ListView

海报图像已从ImageAdapter类设置为ImageView,但找不到id

图像适配器:

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){},确实需要