gpt4 book ai didi

android - 如何向右或向左滑动以获取从 ListView Intent 开始的下一个 Activity 详细信息

转载 作者:行者123 更新时间:2023-11-30 00:48:22 24 4
gpt4 key购买 nike

所以我有一个由 xml 数组列表填充的 ListView 。当我单击列表中的一行时,它会通过详细信息页面的 Intent 启动一个新 Activity 。我希望能够向右或向左滑动以获取与 ListView 中的下一行对应的下一个详细信息页面。我已经设置了我的 onSwipeRight 和 onSwipeLeft,它们可以工作,但我不知道在它们里面放什么来填充下一个/上一个详细信息页面。

这是我的主要 Activity ,带有 ListView 和点击监听器,用于将相关信息传递给详细信息 Activity

public class MainActivity extends AppCompatActivity {
MyDBHandler dbHandler;
int listViewPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbHandler = new MyDBHandler(this, null, null, 1);
//Action Bar customization
final android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayOptions(android.support.v7.app.ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(R.layout.actionbar);

setContentView(R.layout.activity_main);

//fill list view with xml array of routes
final CharSequence[] routeListViewItems = getResources().getTextArray(R.array.routeList);
////fill list view with xml array of route numbers
final TypedArray routeNumberImages = getResources().obtainTypedArray(R.array.routeNumberImages);
//fills route detail text view with xml array info
final CharSequence[] routeDetail= getResources().getTextArray(R.array.routeDetail);
//fills route detail image view with xml array of images
final TypedArray image = getResources().obtainTypedArray(R.array.routeImages);


//custom adapter for list view
ListAdapter routeAdapter = new CustomAdapter(this, routeListViewItems, routeNumberImages);
final ListView routeListView = (ListView) findViewById(R.id.routeListView);
routeListView.setAdapter(routeAdapter);

//sets first visible list item
listViewPosition = getIntent().getIntExtra("listViewPosition", 0);
routeListView.setSelectionFromTop(listViewPosition, 0);

routeListView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

CharSequence route = routeListViewItems[position];
int imageId = (int) image.getResourceId(position, -1);
if (route.equals(routeListViewItems[position]))
{
Intent intent = new Intent(view.getContext(), RouteDetails.class);
intent.putExtra("route", routeDetail[position]);
intent.putExtra("imageResourceId", imageId);
intent.putExtra("routeName", routeListViewItems[position]);
intent.putExtra("listViewPosition", position);
startActivity(intent);
}
}
}
);
}

这是我的带有 onswipe 监听器的详细信息页面

public class RouteDetails extends AppCompatActivity {
MyDBHandler dbHandler;
ImageView routeImage;
String routeName;
CharSequence route;
CheckBox routeCheckBox;
int listViewPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_route_details);

dbHandler = new MyDBHandler(this, null, null, 1);

//sets actionbar title
routeName = getIntent().getExtras().getString("routeName");
getSupportActionBar().setTitle(routeName);

//TextView for route details
final TextView routeDetailsView = (TextView) findViewById(R.id.routeDetailsView);
route = getIntent().getExtras().getCharSequence("route");
routeDetailsView.setText(route);

//ImageView for route details
routeImage = (ImageView) findViewById(R.id.routeImage);
final int mImageResource = getIntent().getIntExtra("imageResourceId", 0);
routeImage.setImageResource(mImageResource);

///gets position of row that was clicked to pass into database
listViewPosition = getIntent().getIntExtra("listViewPosition", 0);


///////////////

routeDetailsView.setOnTouchListener(new OnSwipeTouchListener(this) {
@Override
public void onSwipeLeft() {
// Whatever
Intent i = new Intent(RouteDetails.this,RouteDetails.class);

startActivity(i);
}

@Override
public void onSwipeRight() {
// Whatever
Intent i = new Intent(RouteDetails.this,RouteDetails.class);

startActivity(i);
}

});

///////////////

}

感谢您的帮助!

执行新代码后编辑出错

01-04 12:55:51.694 25443-25443/com.example.zach.listview E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.zach.listview, PID: 25443
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.zach.listview/com.example.zach.listview.RouteDetails}: java.lang.NullPointerException: Attempt to read from null array
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to read from null array
at com.example.zach.listview.RouteDetails.onCreate(RouteDetails.java:56)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

最佳答案

您不应将单个项目传递到详细信息页面,而应传递整个数组以及当前位置(您已经这样做了)。

在你的点击事件(MainActivity)中,替换:

intent.putExtra("route", routeDetail[position]);
intent.putExtra("routeName", routeListViewItems[position]);

与:

intent.putExtra("routes", routeDetail);
intent.putExtra("routeNames", routeListViewItems);

在 RouteDetails 中,您需要获取数组和当前对象:

CharSequence[] routes;
CharSequence[] routeNames;

// ...

listViewPosition = getIntent().getIntExtra("listViewPosition", 0);

routes = getIntent().getExtras().getCharSequenceArray("routes");
routeNames = getIntent().getExtras().getCharSequenceArray("routeNames");

route = routes[listViewPosition];
routeName = routeNames[listViewPosition];

在您的滑动事件中,只需传入数组以及上一个或下一个索引:

routeDetailsView.setOnTouchListener(new OnSwipeTouchListener(this) {
@Override
public void onSwipeLeft() {
// Whatever
Intent i = new Intent(RouteDetails.this,RouteDetails.class);
i.putExtra("routes", routes);
i.putExtra("routeNames", routeNames);
i.putExtra("imageResourceId", imageId);
i.putExtra("listViewPosition", position + 1);
startActivity(i);
}

@Override
public void onSwipeRight() {
// Whatever
Intent i = new Intent(RouteDetails.this,RouteDetails.class);
i.putExtra("routes", routes);
i.putExtra("routeNames", routeNames);
i.putExtra("imageResourceId", imageId);
i.putExtra("listViewPosition", position - 1);
startActivity(i);
}
});

关于android - 如何向右或向左滑动以获取从 ListView Intent 开始的下一个 Activity 详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com