简体   繁体   English

如何在android的listview上添加图像图标?

[英]How can i add image icon on listview in android?

I am having a listview where items are coming from database.我有一个列表视图,其中项目来自数据库。 I tried to putting image icon for listview item in xml.我试图将列表视图项的图像图标放在 xml 中。 but, it's not showing the icon.i tried many things but nothing seems to work on this?但是,它没有显示图标。我尝试了很多东西,但似乎没有任何效果?

Here is my Listview :这是我的列表视图:

public class TypeMenu extends AppCompatActivity {

    private String TAG = TypeMenu.class.getSimpleName();
    String bid;

    private ProgressDialog pDialog;
    private ListView lv;
    private static final String TAG_BID = "bid";

    // URL to get contacts JSON
    private static String url = "http://cloud....com/brtemp/index.php";

    ArrayList<HashMap<String, String>> contactList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_type_menu);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);




        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        contactList = new ArrayList<>();

        lv = (ListView) findViewById(R.id.list);

        new GetContacts().execute();


        // on seleting single product
        // launching Edit Product Screen
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                // getting values from selected ListItem

                HashMap<String, String> selected = contactList.get(position);
                String selectedId= selected.get("id");
                Intent in = new Intent(getApplicationContext(), SubMenu.class);
                //  sending pid to next activity
                in.putExtra("id",selectedId);
                startActivityForResult(in, 100);
                Toast.makeText(getApplicationContext(),"Toast" +selectedId ,Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(TypeMenu.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
           // Toast.makeText(getApplicationContext(),"Toast",Toast.LENGTH_LONG).show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
         String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);





            if (jsonStr != null) {
                try {
                    JSONArray jsonArry = new JSONArray(jsonStr);

                    for (int i = 0; i < jsonArry.length(); i++)
                    {

                        JSONObject c = jsonArry.getJSONObject(i);
                        String id = c.getString("id");
                        String type = c.getString("type");
                        HashMap<String, String> contact = new HashMap<>();

                       contact.put("id", id);
                        contact.put("type", type);
                        contactList.add(contact);


                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });

                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }

            return null;
        }

        @Override
        protected 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(
                    TypeMenu.this, contactList,
                    R.layout.list_item, new String[]{ "type","id"},
                    new int[]{
                    R.id.type,R.id.arrow1});

            lv.setAdapter(adapter);
        }

}
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
        }

above code if i put " R.id.Type, R.id.arrow1" then list lis not opening and giving me error.上面的代码,如果我输入“R.id.Type, R.id.arrow1”然后列出 lis 没有打开并给我错误。

here is my Listview.xml这是我的 Listview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >

    <!-- Product id (pid) - will be DDEN - used to pass to other activity -->



        <TextView
            android:id="@+id/id"
            android:layout_width="30dp"
            android:layout_height="30dp"/>

        <TextView
            android:id="@+id/type"
            android:textSize="20dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>


    <ImageView
        android:id="@+id/arrow1"
        android:layout_width="match_parent"
        android:layout_height="15dp"
        android:layout_gravity="center"
        android:layout_weight="3"
        android:src="@drawable/dropdown" />

    </LinearLayout>

here is my logcat:这是我的日志:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.zeba.broccoli, PID: 1231
                  android.content.res.Resources$NotFoundException: Resource ID #0x1
                      at android.content.res.Resources.getValue(Resources.java:2452)
                      at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:330)
                      at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:195)
                      at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:188)
                      at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100)
                      at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:73)
                      at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:81)
                      at android.widget.SimpleAdapter.setViewImage(SimpleAdapter.java:262)
                      at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:192)
                      at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126)
                      at android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)
                      at android.widget.AbsListView.obtainView(AbsListView.java:2828)
                      at android.widget.ListView.measureHeightOfChildren(ListView.java:1292)
                      at android.widget.ListView.onMeasure(ListView.java:1204)
                      at android.view.View.measure(View.java:18870)
                      at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
                      at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
                      at android.view.View.measure(View.java:18870)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
                      at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:703)
                      at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90)
                      at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1367)
                      at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:768)
                      at android.view.View.measure(View.java:18870)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
                      at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                      at android.view.View.measure(View.java:18870)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
                      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
                      at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
                      at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
                      at android.view.View.measure(View.java:18870)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
                      at android.view.View.measure(View.java:18870)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
                      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
                      at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
                      at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
                      at android.view.View.measure(View.java:18870)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
                      at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3076)
                      at android.view.View.measure(View.java:18870)
                      at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2392)
                      at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1416)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1661)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1301)
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7016)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:590)
                      at android.view.Choreographer.doFrame(Choreographer.java:560)
                    at android.view.Choreographer$FrameDisplayEventRec
I/Process: Sending signal. PID: 1231 SIG: 9
Application terminated.

You are only loading two TextViews in your Adapter.您只在适配器中加载了两个 TextView。

new String[]{ "type","id"}

So the IDs should be those TextViews only.所以 ID 应该只是那些 TextViews。 Primarily because I don't think SimpleAdapter can load ImageViews from the data collection of a Hashmap of String,String.主要是因为我不认为 SimpleAdapter 可以从 String,String 的 Hashmap 的数据集合中加载 ImageViews。

So, instead of所以,而不是

R.id.type,R.id.arrow1

You need to not use the ImageView你不需要使用 ImageView

R.id.type,R.id.id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM