簡體   English   中英

SwipeRefreshLayout有效,但微調器不會顯示

[英]SwipeRefreshLayout works but the spinner won't show

我在使用SwipeRefreshLayout時遇到問題,該功能運行正常,但微調器無法顯示。 我已經使用了所有提供的解決方案,但仍然一無所獲。

我根本不喜歡使用XML,因此我基本上會編寫所有代碼並避免使用它。 我有一個擴展SwipeRefreshLayout的類,在其中創建listView,添加適配器並配置刷新操作等。我的最低API級別為16。

如果您需要任何更多詳細信息或代碼,請告訴我,我們將很高興為您提供任何幫助,我們將不勝感激!

我的活動

public class MainActivity extends Activity {

    private static MainActivity mainActivity = null;
    private MainView mainView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mainView = new MainView(this);
        setContentView(mainView);
    }

    public static MainActivity getMainActivity() {
        return mainActivity;
    }
}

我的主要觀點:

public class MainView extends SwipeRefreshLayout {

    private ListView listView;

    public MainView(Context context) {
        super(context);

        final String [] objects = new String[] {"panda", "horse", "fox"};

        listView = new ListView(context);
        final ArrayAdapter arrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, objects);
        listView.setAdapter(arrayAdapter);
        addView(listView);

        this.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                objects[0] = "Big panda!";
                arrayAdapter.notifyDataSetChanged();
                setRefreshing(false);
            }
        });
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int width = r - l;
        int height = b - t;

        listView.layout(0, 0, width, height);
    }
}

很難看到而又看不到任何代碼,但是我的直覺告訴我,您需要確保已鏈接適當的進度視圖,並且在正確的時間將可見性設置為VISIBLE和INVISIBLE。

這是一個簡單的演示,每次滑動時在編碼的SwipeRefreshLayout都有工作進度,它將在列表中添加一個項目

我的活動:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RelativeLayout container = (RelativeLayout) findViewById(R.id.container);

        CustomSwipeRefresh swipeRefresh = new CustomSwipeRefresh(this);
        container.addView(swipeRefresh);
        swipeRefresh.refreshData();
    }
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/container"
    tools:context="com.divshark.customswiperefresh.MainActivity">


</RelativeLayout>

然后我創建了CustomSwipeRefresh:

public class CustomSwipeRefresh extends SwipeRefreshLayout {

    private static final String TAG = CustomSwipeRefresh.class.getSimpleName();

    private static int MIN_LIST = 50;

    private List<String> mItems = new ArrayList<>();
    private Context mContext;

    private ListView listView;
    private ListAdapter mAdapter;

    public CustomSwipeRefresh(Context context){
        super(context);

        this.mContext = context;


        mAdapter = new ListAdapter(mContext, mItems);

        listView = new ListView(context);
        listView.setAdapter(mAdapter);
        listView.setBackgroundColor(Color.WHITE);
        listView.setDivider(null);
        listView.setDividerHeight(0);
        addView(listView);

        setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {

                setRefreshing(true);

                postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        onRefreshData(true);

                        Log.d(TAG,"--- FINISHED REFRESHING ---");
                        setRefreshing(false);
                    }
                }, 2000);

            }
        });

    }

    public void refreshData(){
        onRefreshData(false);
    }

    /**
     * Called when the data is refreshed in the list
     */
    private void onRefreshData(boolean addItem){

        if(addItem){
            MIN_LIST++;
        }

        mItems.clear();

        for(int i = 0; i < MIN_LIST; i++){
            mItems.add("New item "+ Integer.toString(i + 1));
        }

        mAdapter.notifyDataSetChanged();
    }


    public class ListAdapter extends BaseAdapter{

        public List<String> mItems;
        public Context mContext;
        public LayoutInflater mInflater;

         class Holder{
            AppCompatTextView mTvItem;
        }

        public ListAdapter(Context context, List<String> items){

            this.mContext = context;
            this.mItems = items;
            this.mInflater = LayoutInflater.from(mContext);

        }

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

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

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

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

            Holder holder ;

            if(convertView == null){
                holder = new Holder();
                convertView = mInflater.inflate(R.layout.item_row, parent, false);

                holder.mTvItem = (AppCompatTextView) convertView.findViewById(R.id.item);

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

            String item = mItems.get(position);
            if(item != null){
                holder.mTvItem.setText(item);
            }

            return convertView;
        }
    }
}

和項目布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent" android:padding="16dp">
<android.support.v7.widget.AppCompatTextView
    android:id="@+id/item"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" />
</LinearLayout>

希望這可以幫助!

暫無
暫無

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

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