Android 如何获取水平视图寻呼机的PagerAdapter项目Id?
我已经在屏幕上实现了带有自定义PagerAdapter的水平ViewPager。 我试图实现的是从列表中获取第一项的Id。这是到目前为止所有的代码 PagerAdapter:Android 如何获取水平视图寻呼机的PagerAdapter项目Id?,android,android-layout,android-viewpager,android-custom-view,android-pageradapter,Android,Android Layout,Android Viewpager,Android Custom View,Android Pageradapter,我已经在屏幕上实现了带有自定义PagerAdapter的水平ViewPager。 我试图实现的是从列表中获取第一项的Id。这是到目前为止所有的代码 PagerAdapter: private static final String TAG = ViewPagerAdapter.class.getSimpleName(); private Context context; private LayoutInflater layoutInflater; private ArrayList<Qui
private static final String TAG = ViewPagerAdapter.class.getSimpleName();
private Context context;
private LayoutInflater layoutInflater;
private ArrayList<QuickActionItem> quickActionItems;
public ViewPagerAdapter(Context context, ArrayList<QuickActionItem> items) {
this.context = context;
this.quickActionItems = items;
}
@Override
public float getPageWidth(int position) {
return 0.25f;
}
@Override
public int getCount() {
return quickActionItems.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.item_page_slide, null);
ImageView actionImage = view.findViewById(R.id.img_action);
TextView actionText = view.findViewById(R.id.title_action_value);
actionImage.setImageResource(quickActionItems.get(position).getActionDrawableImage());
actionText.setText(quickActionItems.get(position).getActionName());
ViewPager vp = (ViewPager) container;
vp.addView(view, 0);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_property))) {
Log.d(TAG, "Add Property ");
} else if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_tenant))) {
Log.d(TAG, "Add Tenant ");
context.startActivity(targetIntent);
} else if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_income))) {
Log.d(TAG, "Add Income ");
context.startActivity(targetIntent);
} else if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_expense))) {
Log.d(TAG, "Add Expense ");
}
}
});
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ViewPager vp = (ViewPager) container;
View view = (View) object;
vp.removeView(view);
}
}
main片段
quickActionPager = fragmentView.findViewById(R.id.quick_actions_pager);
sliderDotsPanel = fragmentView.findViewById(R.id.SliderDots);
quickActionItems = new ArrayList<>();
quickActionItems.add(new QuickActionItem(getString(R.string.quick_add_property), R.drawable.ic_add_property));
quickActionItems.add(new QuickActionItem(getString(R.string.quick_add_tenant), R.drawable.ic_add_tenant));
quickActionItems.add(new QuickActionItem(getString(R.string.quick_add_income), R.drawable.ic_add_income));
quickActionItems.add(new QuickActionItem(getString(R.string.quick_add_expense), R.drawable.ic_add_expense));
viewPagerAdapter = new ViewPagerAdapter(getActivity(), quickActionItems);
quickActionPager.setAdapter(viewPagerAdapter);
quickActionPager=fragmentView.findViewById(R.id.quick\u actions\u pager);
sliderDotsPanel=fragmentView.findviewbyd(R.id.SliderDots);
quickActionItems=新建ArrayList();
add(新的QuickActionItem(getString(R.string.quick\u add\u属性)、R.drawable.ic\u add\u属性));
add(新的QuickActionItem(getString(R.string.quick\u add\u租户)、R.drawable.ic\u add\u租户));
添加(新的QuickActionItem(getString(R.string.quick\u add\u income),R.drawable.ic\u add\u income));
添加(新的QuickActionItem(getString(R.string.quick\u add\u expense)、R.drawable.ic\u add\u expense));
viewPagerAdapter=新的viewPagerAdapter(getActivity(),quickActionItems);
quickActionPager.setAdapter(viewPagerAdapter);
我只分享MainFragment必需的部分代码,因为它很长&不管我想实现什么
问题:
private static final String TAG = ViewPagerAdapter.class.getSimpleName();
private Context context;
private LayoutInflater layoutInflater;
private ArrayList<QuickActionItem> quickActionItems;
public ViewPagerAdapter(Context context, ArrayList<QuickActionItem> items) {
this.context = context;
this.quickActionItems = items;
}
@Override
public float getPageWidth(int position) {
return 0.25f;
}
@Override
public int getCount() {
return quickActionItems.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.item_page_slide, null);
ImageView actionImage = view.findViewById(R.id.img_action);
TextView actionText = view.findViewById(R.id.title_action_value);
actionImage.setImageResource(quickActionItems.get(position).getActionDrawableImage());
actionText.setText(quickActionItems.get(position).getActionName());
ViewPager vp = (ViewPager) container;
vp.addView(view, 0);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_property))) {
Log.d(TAG, "Add Property ");
} else if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_tenant))) {
Log.d(TAG, "Add Tenant ");
context.startActivity(targetIntent);
} else if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_income))) {
Log.d(TAG, "Add Income ");
context.startActivity(targetIntent);
} else if (quickActionItems.get(position).getActionName().equals(context.getString(R.string.quick_add_expense))) {
Log.d(TAG, "Add Expense ");
}
}
});
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ViewPager vp = (ViewPager) container;
View view = (View) object;
vp.removeView(view);
}
}
1) 第一项是否可能获得任何类型的ID?在我的例子中,“添加属性”项的Id
2) 如果可能的话,那么如何获取该Id&我是否能够就此调用findviewbyd
如果您需要任何其他信息或代码,也请告诉我
任何帮助都将不胜感激
尝试以下操作:
因此,您需要在viewPager中获取某个页面的布局,然后,
使用findViewById()
获取布局视图。您可以通过将每个膨胀的布局放入实例化Item()
中的树状图中,并在销毁项()中销毁时从树状图中删除布局来实现这一点。然后您可以使用treeMap获得特定的页面布局。get(position)
下面是一个示例:
主活动类
public类MainActivity扩展了AppCompatActivity{
private final String TAG=MainActivity.class.getSimpleName();
私人寻呼机副总裁;
私有ViewPagerAdapter ViewPagerAdapter=null;
专用按钮b;
私有列表数据=新的ArrayList();
私有列表颜色=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp=(ViewPager)findViewById(R.id.vp);
b=(按钮)findViewById(R.id.b);
b、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图){
/**
*使用viewPagerAdapter.getLayout(int位置)获取特定页面的布局
*然后使用findviewbyd()获取该布局内的特定视图
*/
视图布局=viewPagerAdapter.getLayout(vp.getCurrentItem());
if(布局!=null){
TextView tv=(TextView)layout.findviewbyd(R.id.tv);
tv.setTextColor(color.get(vp.getCurrentItem());
}
}
});
颜色。添加(颜色。红色);
颜色。添加(颜色。灰色);
颜色。添加(颜色。蓝色);
颜色。添加(颜色。黄色);
颜色。添加(颜色。洋红色);
颜色。添加(颜色。青色);
color.add(color.LTGRAY);
color.add(color.DKGRAY);
对于(int i=0;i您想设置ID并获取listview的ID吗?@RavindraKushwaha,如果ViewPager可以这样做的话,我也可以。看看下面的解决方案,我在其中做了什么。我使用了字符串itemID作为ID,从QuickActionItembean
类中,我们可以设置itemID并获取itemID如下图所示,请在下面检查一次,以便清楚地了解您在这里的要求:您有一个viewPager,您想使用其ID在某个页面中查找布局视图?@Rabee,是的,因为只有一个使用viewPager的水平列表。
public class MainActivity extends AppCompatActivity {
private final String TAG = MainActivity.class.getSimpleName();
private ViewPager vp;
private ViewPagerAdapter viewPagerAdapter = null;
private Button b;
private List<String> data = new ArrayList<>();
private List<Integer> color = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
b = (Button) findViewById(R.id.b);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/**
* use viewPagerAdapter.getLayout(int position) to get the layout for a certain page
* then use findViewById() to get a certain view inside that layout
*/
View layout = viewPagerAdapter.getLayout(vp.getCurrentItem());
if (layout != null) {
TextView tv = (TextView) layout.findViewById(R.id.tv);
tv.setTextColor(color.get(vp.getCurrentItem()));
}
}
});
color.add(Color.RED);
color.add(Color.GRAY);
color.add(Color.BLUE);
color.add(Color.YELLOW);
color.add(Color.MAGENTA);
color.add(Color.CYAN);
color.add(Color.LTGRAY);
color.add(Color.DKGRAY);
for(int i=0; i<8; i++){
data.add("Page " + (i+1));
}
viewPagerAdapter = new ViewPagerAdapter(MainActivity.this, data);
vp.setAdapter(viewPagerAdapter);
}
}
public class ViewPagerAdapter extends PagerAdapter {
private static final String TAG = ViewPagerAdapter.class.getSimpleName();
private Context context;
private LayoutInflater layoutInflater;
private List<String> data;
private TreeMap<Integer, View> layout;
public ViewPagerAdapter(Context context, List<String> data) {
this.context = context;
this.data = data;
this.layout = new TreeMap<>();
}
@Override
public int getCount() {
return data.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
@NonNull
public Object instantiateItem(@NonNull final ViewGroup container, final int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.page_item, container, false);
TextView tv = (TextView) view.findViewById(R.id.tv);
tv.setText(data.get(position));
/**
* put the inflated layout inside TreeMap with key being the position
*/
this.layout.put(position, view);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
ViewPager vp = (ViewPager) container;
View view = (View) object;
/**
* remove a layout with key position
*/
this.layout.remove(position);
vp.removeView(view);
}
/**
* used to get a layout
* @return TreeMap
*/
public TreeMap<Integer, View> getLayout() {
return this.layout;
}
/**
*
* @param position
* @return View at position
*/
public View getLayout(int position) {
return this.layout.get(position);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="100"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="80"
android:id="@+id/vp">
</android.support.v4.view.ViewPager>
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/b"
android:layout_weight="20"
android:text="Change Text View Color">
</Button>
</LinearLayout>
<?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:id="@+id/ll"
android:layout_marginStart="20dp"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:background="@color/colorAccent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tv"
android:gravity="center"
android:layout_gravity="center"
android:textSize="24sp"
android:textColor="@android:color/black">
</TextView>
</LinearLayout>