我知道有很多这样的问题,但我找不到可以帮助我的问题。请不要注意硬编码的字符串或其他类似的东西,我会修复。我没有在适配器类或片段中看到任何错误。我使用Disco类填充地方列表,Place类包含我在适配器中使用后的所有方法。任何人都可以帮助我吗?谢谢。
Class MainActivity
new
班迪斯科
package com.techmind.tourguideapp;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager manager = getSupportFragmentManager();
ViewPager pager = findViewById(R.id.tourPager);
pager.setAdapter(new FragmentAdapter(manager));
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(pager);
}
}
Class DiscoFragment
package com.techmind.tourguideapp;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Nahuel on 31.05.2018.
*/
public class Disco {
public static ArrayList<Places> initDiscoList(ArrayList<Places> places) {
places.add(new Places().
setAddress("via a").
setImage(1).
setName("casino").
setPhone("333").
setPrice("20€").
setHour("10:30"));
return places;
}
}
Class FragmentAdapter
package com.techmind.tourguideapp;
import android.support.v4.app.Fragment;
import android.location.Location;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Nahuel on 31.05.2018.
*/
public class DiscoFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ArrayList<Places> list = new ArrayList<>();
list = Disco.initDiscoList(list);
PlacesAdapter adapter = new PlacesAdapter(getActivity(), list);
View view = inflater.inflate(R.layout.row_item, container, false);
ListView listView = (ListView) view.findViewById(R.id.list_items);
listView.setAdapter(adapter);
return view;
}
}
课程地点
package com.techmind.tourguideapp;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
/**
* Created by Nahuel on 31.05.2018.
*/
public class FragmentAdapter extends FragmentPagerAdapter {
public FragmentAdapter (FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return new DiscoFragment();
}
@Override
public int getCount() {
return 3;
}
public CharSequence getPageTitle(int position) {
return "Gradara";
}
}
Class PlaceAdapter
package com.techmind.tourguideapp;
/**
* Created by Nahuel on 31.05.2018.
*/
public class Places {
private String name;
private String price;
private String phone;
private String Address;
private String hour;
private int image;
private final int NO_IMAGE = -1;
public Places () {
}
public String getHour() {
return hour;
}
public String getName() {
return name;
}
public String getPrice() {
return price;
}
public String getPhone() {
return phone;
}
public String getAddress() {
return Address;
}
public int getImage() {
return image;
}
public Places setName(String name) {
this.name = name;
return this;
}
public Places setHour(String hour) {
this.hour = hour;
return this;
}
public Places setPrice(String price) {
this.price = price;
return this;
}
public Places setPhone(String phone) {
this.phone = phone;
return this;
}
public Places setAddress(String address) {
Address = address;
return this;
}
public Places setImage(int image) {
this.image = image;
return this;
}
}
activity_main.xml中
package com.techmind.tourguideapp;
import android.content.Context;
import android.location.Location;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class PlacesAdapter extends ArrayAdapter<Places> {
public PlacesAdapter(Context context, List<Places> places) {
super(context,-1, places);
}
public View getView (int position, ViewGroup parent, View convertView) {
View listView = convertView;
Places place = getItem(position);
if(listView == null) {
listView = LayoutInflater.from(getContext()).inflate(
R.layout.row_item, parent, false);
}
TextView location = listView.findViewById(R.id.locationName);
location.setText("casino");
TextView hour = listView.findViewById(R.id.txthour);
hour.setText("aaa");
TextView address = listView.findViewById(R.id.address);
address.setText("aaaaa");
TextView price = listView.findViewById(R.id.txtmoney);
price.setText("aaaaa");
TextView phone = listView.findViewById(R.id.phone);
phone.setText("aaaaa");
ImageView img = listView.findViewById(R.id.imgRow);
img.setImageResource(R.drawable.ic_launcher_background);
return listView;
}
}
List_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.techmind.tourguideapp.MainActivity">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMaxWidth="0dp"
/>
<android.support.v4.view.ViewPager
android:id="@+id/tourPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Row_item.xml
</LinearLayout>
<?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="match_parent">
<ListView
android:id="@+id/list_items"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
答案 0 :(得分:0)
你说你在set adapter上有一个空指针。你在说什么吗? 这行文件DiscoFragment?
listView.setAdapter(适配器)
如果listView为null,则findViewByID找不到视图。或者也许适配器内的东西是null。你说的很难说清楚。
答案 1 :(得分:0)
我在
中发现错误ArrayList<Places> list = new ArrayList<>();
list = Disco.initDiscoList(list);
PlacesAdapter adapter = new PlacesAdapter(getActivity(), list);
View view = inflater.inflate(R.layout.row_item, container, false);
ListView listView = (ListView) view.findViewById(R.id.list_items);
listView.setAdapter(adapter);
return view;
}
当我使用inflate方法时,第一个参数错误,我使用了行的布局而不是listView布局。
感谢您的回答,下次我会发布日志和更少无用的代码:)