簡體   English   中英

旋轉電話在列表視圖中取消選擇我的項目

[英]Rotate telephone unselect my item in list View

當我旋轉手機時,在列表視圖中未選中所選項目。 這是我的適配器。 我只想更改所選項目的顏色(只能進行單選),並且當我旋轉手機時,我要查看選擇的內容。 現在,當我旋轉手機時,我看不到選擇項。

public class MainAdapter extends BaseAdapter {

    private LayoutInflater inflater;
    private Context context;
    ArrayList<RowEntity> rowEntities;

    public MainAdapter(Context context, ArrayList<RowEntity> rowEntities) {
        this.context = context;
        this.rowEntities = rowEntities;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public Object getItem(int position) {
        return rowEntities.get(position);
    }

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

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

        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.main_row_holder, null);
            holder.address = (TextView) convertView.findViewById(R.id.address);
            holder.distance = (TextView) convertView.findViewById(R.id.tv_distance);
            holder.description = (TextView) convertView.findViewById(R.id.description);
            holder.name = (TextView) convertView.findViewById(R.id.name);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        RowEntity rowEntity = rowEntities.get(position);

        if(rowEntity != null){
            holder.address.setText(rowEntity.getAddress());
            holder.address.setText(rowEntity.getAddress());
            holder.distance.setText(rowEntity.getDistance() +"");
        }
        return convertView;
    }

    private class ViewHolder{
        TextView address;
        TextView distance;
        TextView description;
        TextView name;
    }
}

這是我關於layout的listView:

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:drawSelectorOnTop="false"
    android:listSelector="@drawable/background_listview"
    android:visibility="visible"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_above="@+id/bottomPanel" />

這是background_listview.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/white_background"
        android:state_pressed="true" />
    <item android:drawable="@color/primary_color"
        android:state_focused="false" />
</selector>

我在清單上添加:

    android:configChanges="keyboardHidden|orientation|screenSize"

當我旋轉手機時onCreate無法正常工作

將您的活動launchMode設置為singleTop

<activity android:launchMode="singleTop" >
</activity>

並覆蓋onNewIntent:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    //setIntent(intent);
}

這將重用活動堆棧中的活動。

發生這種情況是因為Android重新加載了布局(基本上是在配置更改時重新創建它。在您的情況下,這是屏幕的旋轉。

您可以通過在發生此問題的活動下的manifest.xml中應用以下屬性來防止android執行此操作

android:configChanges="orientation|screenSize"

這告訴android您要自己處理配置更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM