【问题标题】:Android List view layout Similar to Google playAndroid 列表视图布局类似于 Google play
【发布时间】:2014-03-10 07:49:17
【问题描述】:

我想实现一个类似于 Google Play 的列表布局,其中每个行都有菜单。请帮我创建这个。

我需要创建一个弹出菜单还是有任何可用的选项来实现这一点。

谢谢

【问题讨论】:

标签: android android-listview android-custom-view android-listfragment


【解决方案1】:

看起来您正在尝试完全按照图中所示的方式进行操作。我只是举例说明我是如何实现这一目标的。

我是这样做的。不是很困难。只是直接实现弹出菜单。

第 1 步:我的适配器

 public class ListAdapter extends BaseAdapter{

        private ArrayList<String> mainList;


        public ListAdapter(Context applicationContext,
                ArrayList<String> questionForSliderMenu) {

            super();

            this.mainList = questionForSliderMenu;

        }

        public ListAdapter() {

            super();
            this.mainList = QuestionForSliderMenu;

        }

        @Override
        public int getCount() {

            return mainList.size();
        }

        @Override
        public Object getItem(int position) {

            return mainList.get(position);
        }

        @Override
        public long getItemId(int position) {

            return position;
        }

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

            if (convertView == null) {

                LayoutInflater inflater = (LayoutInflater) getApplicationContext()
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.custom_row_stack, null);
            }


            TextView tv1 = (TextView) convertView
                    .findViewById(R.id.row_textView1);
            TextView tv2 = (TextView) convertView
                    .findViewById(R.id.row_install_textView1);
            ImageView imageIcon = (ImageView) convertView
                    .findViewById(R.id.row_imageView1);
            ImageView imageClick = (ImageView) convertView
                    .findViewById(R.id.row_click_imageView1);

            try {

                tv1.setText(" List Item "+ " : " + position);
                imageClick.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {



                        switch (v.getId()) {
                        case R.id.row_click_imageView1:

                            PopupMenu popup = new PopupMenu(getApplicationContext(), v);
                            popup.getMenuInflater().inflate(R.menu.clipboard_popup,
                                    popup.getMenu());
                            popup.show();
                            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                                @Override
                                public boolean onMenuItemClick(MenuItem item) {

                                    switch (item.getItemId()) {
                                    case R.id.install:

                                        //Or Some other code you want to put here.. This is just an example.
                                        Toast.makeText(getApplicationContext(), " Install Clicked at position " + " : " + position, Toast.LENGTH_LONG).show();

                                        break;
                                    case R.id.addtowishlist:

                                        Toast.makeText(getApplicationContext(), "Add to Wish List Clicked at position " + " : " + position, Toast.LENGTH_LONG).show();

                                        break;

                                    default:
                                        break;
                                    }

                                    return true;
                                }
                            });

                            break;

                        default:
                            break;
                        }



                    }
                });

            } catch (Exception e) {

                e.printStackTrace();
            }

            return convertView;
        }

    }

第 2 步: 在 Activity 中,只需设置适配器:

public class CustomListActivity extends Activity {

    String[] numbers = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "Jack", "Queen", "King" };
    ArrayList<String> QuestionForSliderMenu = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_layout);

        ListView listView = (ListView) findViewById(R.id.customlistView1);




        for (String s : numbers) {

            QuestionForSliderMenu.add(s);

        }

        ListAdapter mAdapter = new ListAdapter(this, QuestionForSliderMenu);

        listView.setAdapter(mAdapter);

    }

第 3 步:自定义行项目/布局:

custom_row_stack.xml

<?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"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/row_imageView1"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginTop="10dp"
            android:src="@drawable/page1" />

        <TextView
            android:id="@+id/row_textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="20dp"
            android:text="Some Item"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#333333" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/row_click_imageView1"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_gravity="right"
                android:clickable="true"
                android:src="@drawable/dots" />

            <TextView
                android:id="@+id/row_install_textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:padding="10dp"
                android:text="Install"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#333333" />
        </LinearLayout>
    </LinearLayout>

第 4 步:我的弹出菜单.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/install"
        android:title="Install" />
    <item
        android:id="@+id/addtowishlist"
        android:title="Add to wishlist" />
</menu>

最后:它的外观截图。

ListView http://imageshack.com/a/img822/4144/umdy.png ListView http://imageshack.com/a/img32/9839/ne90.png ListView http://imageshack.com/a/img198/7404/prqc.png

如果有更好的解决方案,对我也很有帮助。 希望这会有所帮助..:)

【讨论】:

  • 很高兴它有帮助.. :)
  • @Droidy Awesome.. 我很高兴它有帮助。老实说..现在我们有了 Recycler View,我们可以有一个更好的实现。也许我会为未来的观众更新这个答案..:)
  • @mike20132013 是的,伙计。你应该猜! ;-)
  • E/ACRA:ACRA 捕获到 InflateException 异常会发生,我会按照你的代码。请需要您的帮助,在此先感谢
  • @MohanRajS 膨胀视图时是否出现问题?这是一个旧代码,但通货膨胀不应该是那个问题。让我知道你卡在哪里了。
【解决方案2】:

您可以使用Cards-UI Library

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多