java - Android:(DragSort)ListView 项目未使用可用宽度

标签 java android listview width

我使用 Bauerca 的 DragSortListView (github.com/bauerca/drag-sort-listview) 来显示带有两个按钮的 channel 列表。但是 TextView (textViewChannel) 没有填充可用空间!我做错了什么??

channel_list.xml:

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray"
        android:text="@string/inputs"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <com.mobeta.android.dslv.DragSortListView
        android:id="@+id/listShowChannels"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="3dp"
        android:choiceMode="multipleChoice"
        android:dividerHeight="1px"
        android:padding="3dp"
        dslv:collapsed_height="1px"
        dslv:drag_enabled="true"
        dslv:drag_handle_id="@+id/drag_handle"
        dslv:drag_scroll_start="0.33"
        dslv:drag_start_mode="onDown"
        dslv:float_alpha="0.6"
        dslv:remove_enabled="true"
        dslv:remove_mode="clickRemove"
        dslv:slide_shuffle_speed="0.3" />

</LinearLayout>

channel .xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/channel_list"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" 
    android:weightSum="1">

    <ImageView
        android:id="@+id/drag_handle"
        android:layout_width="46dp"
        android:layout_height="46dp"
        android:src="@drawable/drag" />

    <TextView
        android:id="@+id/textViewChannel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_weight="1"
        android:text="TextView" />

    <ToggleButton
        android:id="@+id/toggleButtonMute"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@drawable/btn_mute_bg"
        android:text="MUTE"
        android:textOff="MUTE"
        android:textOn="MUTE" />

    <ToggleButton
        android:id="@+id/toggleButtonHide"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_mute_bg"
        android:checked="false"
        android:gravity="center_vertical|center_horizontal"
        android:layout_weight="0"
        android:text="HIDE"
        android:textOff="HIDE"
        android:textOn="HIDE" />
</LinearLayout>

ChannelList.java:

public class ChannelList extends Activity {

    DragSortListView channels;
    ChannelAdapter adapter;


    private DragSortListView.DropListener onDrop =
            new DragSortListView.DropListener() {
                @Override
                public void drop(int from, int to) {
                    if (from != to) {
                        adapter.moveCheckState(from+1, to+1);
                        channels.invalidateViews();
                    }
                }
            };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.channel_list);

        channels = (DragSortListView) getListView();
        adapter = new ChannelAdapter(this, MainActivity.f);
        channels.setAdapter(adapter);
        channels.setDropListener(onDrop);

        this.setTitle("Channel list");
    }

    protected DragSortListView getListView() {
        // TODO Auto-generated method stub
        return (DragSortListView) this.findViewById(R.id.listShowChannels);
    }

}
class ChannelAdapter extends BaseAdapter implements OnClickListener {

    Fader channel[];
    Context c;

    public ChannelAdapter(Context context, Fader[] f) {
        channel = f;
        c = context;
    }

    public void moveCheckState(int from, int to) {
        // TODO Auto-generated method stub
        Fader temp;

        if (from < to) {

            temp = channel[from];
            for (int i=from; i<to; i++){
                channel[i] = channel[i+1];
                channel[i].invalidate();
            }
            channel[to] = temp;
            channel[to].invalidate();

        } else {

            temp = channel[from];
            for (int i=from; i>to; i--){
                channel[i] = channel[i-1];
                channel[i].invalidate();
            }
            channel[to] = temp;
            channel[to].invalidate();

        }

        for (int i=1; i<33; i++){
            MainActivity.order[Integer.parseInt(MainActivity.f[i].getChannelNumber())] = i;
        }

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return channel.length-1;
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        String str = String.format("%02d: %s", position+1, channel[position+1].getChannelName());
        return str;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public void remove(Object item) {

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

         View v = convertView;
         if (v == null) {
             LayoutInflater vi = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             v = vi.inflate(R.layout.channels, null);
         } 

         TextView name = (TextView) v.findViewById(R.id.textViewChannel);
         int chanNumber = Integer.parseInt(channel[position+1].getChannelNumber());
         String str = String.format("%02d: %s", chanNumber, channel[position+1].getChannelName());
         name.setText(str);

         ToggleButton tbHide = (ToggleButton) v.findViewById(R.id.toggleButtonHide);
         tbHide.setChecked(!channel[position+1].isVisible());
         tbHide.setTag(new Integer(position+1));
         tbHide.setOnClickListener(this);

         ToggleButton tbMute = (ToggleButton) v.findViewById(R.id.toggleButtonMute);
         tbMute.setChecked(channel[position+1].isMute());
         tbMute.setTag(new Integer(position+1));
         tbMute.setOnClickListener(this);

         return v;
    }

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

        Integer position = (Integer) togg.getTag();

        switch (v.getId()) {
        case R.id.toggleButtonHide:
            channel[position].setVisible(!togg.isChecked());
            MainActivity.f[position].setVisible(!togg.isChecked());
            break;
        case R.id.toggleButtonMute:
            channel[position].setMute(togg.isChecked());
            MainActivity.f[position].setMute(togg.isChecked());
            break;
        }

    }

}

我一定错过了一些明显的东西!

最佳答案

我认为你必须改变线路

v = vi.inflate(R.layout.channels, null);

在您的 getView 方法中

v = vi.inflate(R.layout.channels, parent, false);

然后它应该可以工作。原因是 View v 没有布局参数。

我遇到了完全相同的问题,并且能够通过这种方式解决它。

关于java - Android:(DragSort)ListView 项目未使用可用宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18847482/

相关文章:

java - ListItem.onItemClickListener 与 CustomAdapter 无响应

java - 使用 Hudson 进行 Maven 发布。发布成功,但 Hudson 保持红色

java - 如何在 Java 中打断长行

java - 使用已插入的一些字段打开 Android 的联系人 Activity

java - 有什么方法可以将自动更正添加到我的 Android 键盘吗?

android - Gmail 样式 ListView

java - 图道路复杂度

java - 对象与条件,wait() 与 await()

android - Google 登录 - 尝试访问用户信息时出现 401 错误 "Login Required"

java - 为什么gridview不显示任何项目?仅在恢复 Activity 后才显示