java - 如何将listview转换为recyclerview

标签 java android listview android-recyclerview

我在项目中使用 recyclerview 时遇到问题
我使用这个项目 listview,现在在新版本中我使用 recyclerview 请帮我转换它 MainActivity.java 是:

我在项目中使用 recyclerview 时遇到问题
我使用这个项目 listview,现在在新版本中我使用 recyclerview 请帮我转换它 MainActivity.java 是:

主要 Activity 代码是:

public class MainActivity extends BaseActivity{
private static final String TAG = MainActivity.class.getSimpleName();
private ListView listView;
private FeedListAdapter listAdapter;
private List<FeedItem> feedItems;
private String URL_FEED = "http://host.com/android/index3.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView) findViewById(R.id.list);
    feedItems = new ArrayList<FeedItem>();
    listAdapter = new FeedListAdapter(this, feedItems);
    listView.setAdapter(listAdapter);
    // We first check for cached request
    Cache cache = AppController.getInstance().getRequestQueue().getCache();
    Entry entry = cache.get(URL_FEED);
    if (entry != null) {
        // fetch the data from cache
        try {
            String data = new String(entry.data, "UTF-8");
            try {
                parseJsonFeed(new JSONObject(data));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

    } else {
        // making fresh volley request and getting json
        JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET,
                URL_FEED, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                VolleyLog.d(TAG, "Response: " + response.toString());
                if (response != null) {
                    parseJsonFeed(response);
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
            }
        });
        // Adding request to volley request queue
        AppController.getInstance().addToRequestQueue(jsonReq);
    }
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // FeedItem item = feedItems.get(position);
            //Toast.makeText(MainActivity.this,"ddd"+item.getPrice(), Toast.LENGTH_SHORT).show();

            Intent intent = new Intent(MainActivity.this, RegisterActivity.class);  //YOUR_ACTIVITY is where you want to pass data
            FeedItem feedItem = (FeedItem) listView.getItemAtPosition(position);

            intent.putExtra("feed_item", feedItem);
            startActivity(intent);
        }
    });
}
}
/**
 * Parsing json reponse and passing the data to feed view list adapter
 * */
private void parseJsonFeed(JSONObject response) {
    try {
        JSONArray feedArray = response.getJSONArray("feed");
        for (int i = 0; i < feedArray.length(); i++) {
            JSONObject feedObj = (JSONObject) feedArray.get(i);
            FeedItem item = new FeedItem();
            item.setId(feedObj.getInt("id"));
            item.setName(feedObj.getString("name"));
            // Image might be null sometimes
            String image = feedObj.isNull("image") ? null : feedObj
                    .getString("image");
            item.setImge(image);
            item.setprice(feedObj.getString("price"));
            item.setintro(feedObj.getString("intro"));
            item.setdate1(feedObj.getString("date1"));
            item.setdate2(feedObj.getString("date2"));
            item.setvalance(feedObj.getString("valance"));
            // url might be null sometimes
            String feedUrl = feedObj.isNull("url") ? null : feedObj
                    .getString("url");
            item.setUrl(feedUrl);
            feedItems.add(item);
        }
        // notify data changes to list adapater
        listAdapter.notifyDataSetChanged();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    switch (id)
    {
        case R.id.action_main: return true;
    }

    return super.onOptionsItemSelected(item);
}
@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
}

我使用listadaptor,代码是:

public class FeedListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<FeedItem> feedItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();

public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
    this.activity = activity;
    this.feedItems = feedItems;
}

@Override
public int getCount() {
    return feedItems.size();
}

@Override
public Object getItem(int location) {
    return feedItems.get(location);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.feed_item, null);

    if (imageLoader == null)
        imageLoader = AppController.getInstance().getImageLoader();

    TextView name = (TextView) convertView.findViewById(R.id.name);

    TextView intro = (TextView) convertView.findViewById(R.id.intro);

    TextView valance = (TextView) convertView.findViewById(R.id.valance);

    TextView date1 = (TextView) convertView.findViewById(R.id.date1);
    TextView date2 = (TextView) convertView.findViewById(R.id.date2);

    TextView price = (TextView) convertView.findViewById(R.id.price);

    TextView url = (TextView) convertView.findViewById(R.id.txtUrl);

    FeedImageView feedImageView = (FeedImageView) convertView
            .findViewById(R.id.feedImage1);

    FeedItem item = feedItems.get(position);

    name.setText(item.getName());
    intro.setText(item.getintro());

    valance.setText(item.getvalance());
    date1.setText(item.getdate1());
    date2.setText(item.getdate2());
    price.setText(item.getprice());

    // Converting timestamp into x ago format


    // Checking for null feed url
    if (item.getUrl() != null) {
        url.setText(Html.fromHtml("<a href=\"" + item.getUrl() + "\">"
                + item.getUrl() + "</a> "));

        // Making url clickable
    //  url.setMovementMethod(LinkMovementMethod.getInstance());
    //  url.setVisibility(View.VISIBLE);
    } else {
        // url is null, remove from the view
        url.setVisibility(View.GONE);
    }

    // user profile pic

    // Feed image
    if (item.getImge() != null) {
        feedImageView.setImageUrl(item.getImge(), imageLoader);
        feedImageView.setVisibility(View.VISIBLE);
        feedImageView
                .setResponseObserver(new FeedImageView.ResponseObserver() {
                    @Override
                    public void onError() {
                    }

                    @Override
                    public void onSuccess() {
                    }
                });
    } else {
        feedImageView.setVisibility(View.GONE);
    }

    return convertView;
}

}

最佳答案

如果你删除 ListView 并从头开始创建一个回收器 View ,会更容易。 recyclerview 需要一个适配器,其中实现了 3 个方法来调用 Activity 。 您需要创建列表的 XML 资源并在 xml Activity 中调用。

我在 github 上有一个示例可以帮助你 here .

这个视频对我开始一个简单的recyclerview有很大帮助:

Recyclerview tutorial .

关于java - 如何将listview转换为recyclerview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40202046/

相关文章:

java - 加密被截断

android - 我想在android studio中使用限定符<large>,但我无法添加目录layout-large

android notifyDataSetChanged 不起作用

javascript - 如何使用来自 WebService 的 JSON 数据填充 NativeScript 中的 ListView?

java - java中的实例变量继承

java - Frege 中与 Java 的互操作性,尤其是在 IO Monad 中

java - 错误的通用返回类型

java - 如何在 ArrayList 中转换嵌套的 HashMap

java - `Matrix.setRotate` 和 `Matrix.postRotate` 有什么区别

c# - 当鼠标悬停在列标题上时滚动 ListView