آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ایجاد روال کلیک برای آیتمی از ListView ای که به صورت Fragment در یکی از Tab های ViewPager قرار دارد

hamed  11 سال پیش  11 سال پیش
+1 0

کلیت موضوع از عنوان مشخصه. اگر راه حل عمومی دارد هم لطفا ارائه کنید.

خوب شرح واقعه: (لینک سورس ها در آخر سوال اضافه شد)

من یک نمونه برنامه دانلود و به عنوان پروژه وارد کردم. (اگر لازم دانستید بگید سورس بگذارم) این پروژه به این صورت است که ما یک صفحه اصلی داریم (main_layout) که در داخل آن چند عدد تب به صورت ViewPager قرار دارد. و در هر کدام از این تب ها هم یک لیست ویو (fragment_list) قرار دارد. آیتم های این لیست ویو از لی اوتی به نام test ایجاد می شوند که در آن کلیدی به نام btnItem قرار داده شده است. حالا من می خواهم به این کلید (یا حتی کل آیتم لیست ویو) یک روال اختصاص بدهم که در صورت کلیک شدن یک log ایجاد کند.

حالا جزئیات کدها: (بخش های غیر ضروری حذف شده اند)

کدهای MainActivity

public class MainActivity extends ActionBarActivity implements ScrollTabHolder, 
ViewPager.OnPageChangeListener {

//تعریف متغیرها حذف شده است.

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

//کدهای متفرقه حذف شده است

@Override
public Fragment getItem(int position) {
ScrollTabHolderFragment fragment;
fragment = (ScrollTabHolderFragment) SampleListFragment.newInstance(position);
mScrollTabHolders.put(position, fragment);
return fragment;
}

کدهای کلاس fragment:

public class HamedSampleListFragment extends ScrollTabHolderFragment 
implements OnScrollListener { private static final String ARG_POSITION = "position"; private ListView mListView; private ArrayList mListItems; private int mPosition; View v; static Button btnItem; public static Fragment newInstance(int position) { HamedSampleListFragment f = new HamedSampleListFragment(); Bundle b = new Bundle(); b.putInt(ARG_POSITION, position); f.setArguments(b); Log.i("log", "tab in main" + position); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPosition = getArguments().getInt(ARG_POSITION); mListItems = new ArrayList(); for (int i = 1; i <= 1; i++) { mListItems.add(i + ". item - currnet page: " + (mPosition + 1)); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_list, null);
// این بخش از کد را برای این اضافه کردم تا بتونم کلید را تعریف کنم که احتمالا
// راه اشتباهی انتخاب کردم چون هرچند در لاگ زیر تونستم تکست را بگیرم ولی در ادامه روال کلیک جاب نمی دهد //******************* View view = inflater.inflate(R.layout.test, null); Log.i("log", "test step 2"); btnItem = (Button) view.findViewById(R.id.btnItem); Log.i("log", "button text : " + btnItem.getText().toString()); //جایی که باید روال کلیک جواب می داد ولی نمی دهد
btnItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Log.i("log", "test step 3"); } });

//************************

mListView = (ListView) v.findViewById(R.id.listView); View placeHolderView = inflater.inflate(R.layout.view_header_placeholder, mListView, false); mListView.addHeaderView(placeHolderView); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView.setOnScrollListener(this); mListView.setAdapter(new ArrayAdapter(getActivity(), R.layout.test, R.id.text11, mListItems)); } @Override public void adjustScroll(int scrollHeight) { if (scrollHeight == 0 && mListView.getFirstVisiblePosition() >= 1) { return; } mListView.setSelectionFromTop(1, scrollHeight); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (mScrollTabHolder != null) mScrollTabHolder.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount, mPosition); } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // nothing } }

یک کلاس و اینترفیس رابط هم وجود دارد:

اولی : ScrollTabHolder

package com.kmshack.newsstand;
import android.widget.AbsListView;

public interface ScrollTabHolder {
    void adjustScroll(int scrollHeight);
    void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount, int pagePosition);
}

دومی: ScrollTabHolderFragment

package com.kmshack.newsstand;
import android.support.v4.app.Fragment;
import android.widget.AbsListView;

public abstract class ScrollTabHolderFragment extends Fragment implements ScrollTabHolder {
    protected ScrollTabHolder mScrollTabHolder;
    public void setScrollTabHolder(ScrollTabHolder scrollTabHolder) {
        mScrollTabHolder = scrollTabHolder;
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount, int pagePosition) {
        // nothing
    }
}

با تشکر از وقتی که می گذارید.

خوب این هم سورس ها:

1- سورس خود پروژه: ParallaxHeaderViewPager که از اینجا ایمپورت شده و تغییراتی در ان داده شده است.

2- اندروید ساپورت ورژن هفت که نیازه: لینک

3- کتابخانه nineoldandroid: لینک

+1 0
مدیران لطفا اگر خالی دیده می شود حذف نکنند تا ببینیم مشکل از چیه. دفعه دومه پست را می گذارم. طولانیه و متاسفانه کپی اش نکردم! (11 سال پیش)
+1 0
سوال ویرایش شد و سورس ها اضافه شدند. (11 سال پیش)
+1 0
با تشکر از دوستانی که وقت گذاشتند. دوستان این سوال یه سوال کلی هم محسوب می شه (اگر به عنوان توجه شود) لطفا همکاری بفرمائید. (11 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .