【问题标题】:Listview/ListItem Button not Showing up?Listview/ListItem 按钮未显示?
【发布时间】:2014-11-30 21:56:09
【问题描述】:

我正在尝试创建一个列表,其中每个列表项都有两个文本视图和按钮,但是,当按钮在那里时,我无法看到文本视图文本。我正在做的是创建一个自定义列表适配器,以便我可以使用按钮的单击事件。任何想法为什么我的文本视图中的文本没有显示?每个列表项都有该按钮,如果单击,则会显示吐司消息。

在我的活动中调用客户适配器:

ListAdapter adapter = new CustomSimpleAdapter(getActivity(), tripList,
                        R.layout.list_row, new String[] { TAG_TRIPID, TAG_TRIPNAME,     TAG_TRIPSUMMARY, TAG_DISTANCE },
                        new int[] { R.id.pid, R.id.title, R.id.trip_sum, R.id.trip_dist });

 // updating listview
 ((ListView) lv.findViewById(R.id.list)).setAdapter(adapter);

我的自定义适配器:

private class CustomSimpleAdapter extends SimpleAdapter implements OnClickListener  {
    private final Activity context;
    private Button btnAddExpense = null;

    public CustomSimpleAdapter(Activity context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, tripList, resource, from, to);
        this.context = getActivity();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.list_row, parent, false);
        btnAddExpense = (Button) rowView.findViewById(R.id.btn_addExpense);
        //btnAddExpense.setTag(position);

        btnAddExpense.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(context, "List Item Clicked.",
                           Toast.LENGTH_LONG).show();
            }
        });
        return rowView;          
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}

list_row xml:

<TextView
    android:id="@+id/pid"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="gone" />

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:typeface="sans"
    android:textSize="15sp"
    android:textColor="@drawable/list_item_text"
    android:textStyle="bold"/>

<TextView
    android:id="@+id/trip_sum"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/title"
    android:textSize="12sp"
    android:textColor="@drawable/list_item_text"
    android:layout_marginTop="1dip" />

<TextView
    android:id="@+id/trip_dist"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/title"
    android:layout_toLeftOf="@+id/btn_addExpense"
    android:textSize="24sp"
    android:textColor="@drawable/list_item_text"
    android:textStyle="bold"/>

<Button
    android:id="@+id/btn_addExpense"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/trip_sum"
    android:layout_alignRight="@+id/trip_sum"
    android:text="+Expense" />
</RelativeLayout>

感谢您的帮助!

编辑: 在创建自定义适配器之前,我使用的是 SimpleAdapter,并且数据显示良好。

ListAdapter adapter = new SimpleAdapter(getActivity(), tripList,
                        R.layout.list_row, new String[] { TAG_TRIPID, TAG_TRIPNAME, TAG_TRIPSUMMARY, TAG_DISTANCE },
                        new int[] { R.id.pid, R.id.title, R.id.trip_sum, R.id.trip_dist });

【问题讨论】:

  • 您从未在适配器中的 TextView 中设置任何文本

标签: android android-layout listview android-listview listadapter


【解决方案1】:

你没有在TextViews 上打电话给setText(),这就是原因。另外,我不知道你是怎么想出那个布局的,但它真的很难看。如果你不使用第一个TextView,为什么要在里面?

更新:在getView() 方法中,检索TextView 的每个实例,就像您使用您为布局中的每个TextView 提供的ID 那样使用那里的按钮所做的那样,一旦您拥有它,只需调用set text 并提供它包含要为每一行显示的文本数据的数组

【讨论】:

  • 我在网上关注一个教程,我只是想让这个工作,现在不太关心布局......在我使用自定义适配器之前,我使用了 SimpleAdapter,它工作正常,无需调用 setText() 即可将数据加载到文本视图中...
  • 我知道 SimpleAdapter 将数据映射到每一行,但是如何在我的 customadapter 中复制它...
  • 否,当您创建自己的自定义适配器时,如果您直接使用其中一个适配器(例如 ArrayAdapter),则您负责加载数据并在所有视图上设置数据您只需要为适配器提供您想要显示的数据,它会为您处理其他所有事情,但是如果您创建自定义适配器,则必须为每一行扩展布局并为每一行中的每个视图设置适当的数据.
猜你喜欢
  • 1970-01-01
  • 2020-07-13
  • 2018-10-05
  • 2017-07-08
  • 1970-01-01
  • 2015-10-04
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多