我已经在用户的配置文件都显示在一个GridView
的页面。每个网格包含用户(姓名,身份证,年龄等)有一个按钮,带我们到下一个屏幕沿型材。
我实现了电网扩展功能,这样当用户点击网格,网格将展开以显示更多的信息。我引用了扩展功能如下github上代码:https://github.com/thewaychung/ExpandableGridView
但是,当我实现了这个在我的项目,我得到叠加在现有网格视图,而不是显示了被点击的网格项目时展开视图。
这里是我的代码:
public class MainActivity extends AppCompatActivity {
GridView gv;
FirebaseDatabase database;
DatabaseReference db;
FirebaseListAdapter adapter;
FirebaseListAdapter childAdapter;
Button t;
GridView cv;
TextInputLayout parentInfo;
TextInputLayout childInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ExpandableGridView gv = findViewById(R.id.gridView);
final GridView cv = findViewById(R.id.childView);
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,Next.class);
startActivity(i);
}
});
//SETUP FIREBASE
db = FirebaseDatabase.getInstance().getReference();
Log.i("TEST", "TEST");
Query query = FirebaseDatabase.getInstance().getReference().child("users");
FirebaseListOptions<users> options = new FirebaseListOptions.Builder<users>()
.setLayout(R.layout.users)
.setLifecycleOwner(MainActivity.this)
.setQuery(query, users.class)
.build();
//ADAPTER
adapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(@NonNull View v, @NonNull Object model, int position) {
TextView name = v.findViewById(R.id.name);
TextView age = v.findViewById(R.id.age);
TextView mid = v.findViewById(R.id.mid);
ImageView image = v.findViewById(R.id.userImage);
image.setScaleType(ImageView.ScaleType.FIT_XY);
TextView cont = v.findViewById(R.id.cont);
users mt = (users) model;
name.setText(" Name: "+ mt.getName());
age.setText(" Age: "+ mt.getAge().toString());
mid.setText(" ID: "+ mt.getMid());
cont.setText(mt.getCount().toString());
Picasso.with(MainActivity.this).load(mt.getImage()).into(image);
Button d = v.findViewById(R.id.d);
parentInfo = v.findViewById(R.id.parentInfo);
parentInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"This is the parent information",Toast.LENGTH_SHORT).show();
}
});
d.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,Next.class);
startActivity(i);
}
});
}
};
gv.setAdapter(adapter);
childAdapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(@NonNull View v, @NonNull Object model, int position) {
TextView name = v.findViewById(R.id.name);
TextView age = v.findViewById(R.id.age);
TextView mid = v.findViewById(R.id.mid);
ImageView image = v.findViewById(R.id.userImage);
image.setScaleType(ImageView.ScaleType.FIT_XY);
TextView cont = v.findViewById(R.id.cont);
users mt = (users) model;
name.setText(" Name: "+mt.getName());
age.setText(" Age: "+mt.getAge().toString());
mid.setText(" ID: "+mt.getMid());
cont.setText(mt.getCount().toString());
Picasso.with(MainActivity.this).load(mt.getImage()).into(image);
Button d = v.findViewById(R.id.d);
childInfo = v.findViewById(R.id.parentInfo);
childInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"This is the child information",Toast.LENGTH_SHORT).show();
}
});
}
};
cv.setAdapter(childAdapter);
final ExpandableGridView parentGridView = (ExpandableGridView)findViewById(R.id.gridView);
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//expand the grid view
gv.expandGridViewAtView(view,childAdapter);
}
});
//click event listener of sub gridview
gv.setOnExpandItemClickListener(new ExpandableGridView.OnExpandItemClickListener() {
@Override
public void onItemClick(int position, Object clickPositionData) {
Toast.makeText(getBaseContext(),clickPositionData.toString()+"clicked",Toast.LENGTH_LONG).show();
}
});
gv.setOnExpandItemClickListener(new ExpandableGridView.OnExpandItemClickListener() {
@Override
public void onItemClick(int position, Object clickPositionData) {
Toast.makeText(getBaseContext(),clickPositionData.toString()+"clicked",Toast.LENGTH_LONG).show();
}
});
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
}
基本上childView被重叠parentView而不是显示出来被点击父项目时即网格项。
这是我更新的代码:
public class MainActivity extends AppCompatActivity {
GridView gv;
FirebaseDatabase database;
DatabaseReference db;
FirebaseListAdapter adapter;
FirebaseListAdapter childAdapter;
Button t;
GridView cv;
TextInputLayout parentInfo;
TextView child;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button t = findViewById(R.id.payBtn);
final ExpandableGridView gv = findViewById(R.id.gridView);
//final GridView cv = findViewById(R.id.childView);
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,Next.class);
startActivity(i);
}
});
//SETUP FIREBASE
db = FirebaseDatabase.getInstance().getReference();
Log.i("TEST", "TEST");
Query query = FirebaseDatabase.getInstance().getReference().child("users");
FirebaseListOptions<users> options = new FirebaseListOptions.Builder<users>()
.setLayout(R.layout.users)
.setLifecycleOwner(MainActivity.this)
.setQuery(query, users.class)
.build();
//ADAPTER
adapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(@NonNull View v, @NonNull Object model, int position) {
TextView name = v.findViewById(R.id.name);
TextView age = v.findViewById(R.id.age);
TextView mid = v.findViewById(R.id.mid);
ImageView image = v.findViewById(R.id.userImage);
image.setScaleType(ImageView.ScaleType.FIT_XY);
TextView cont = v.findViewById(R.id.cont);
users mt = (users) model;
name.setText(" Name: "+ mt.getName());
age.setText(" Age: "+ mt.getAge().toString());
mid.setText(" ID: "+ mt.getMid());
cont.setText(mt.getCount().toString());
Picasso.with(MainActivity.this).load(mt.getImage()).into(image);
Button d = v.findViewById(R.id.d);
parentInfo = v.findViewById(R.id.parentInfo);
parentInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"This is the parent information",Toast.LENGTH_SHORT).show();
}
});
d.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,Payment.class);
startActivity(i);
}
});
}
};
gv.setAdapter(adapter);
childAdapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(@NonNull View v, @NonNull Object model, int position) {
TextView field = v.findViewById(R.id.field);
users mt = (users) model;
field.setText(" Field: "+ mt.getField());
child = v.findViewById(R.id.field);
child.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"This is the child information",Toast.LENGTH_SHORT).show();
}
});
}
};
//final ExpandableGridView parentGridView = (ExpandableGridView)findViewById(R.id.gridView);
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//expand the grid view
gv.expandGridViewAtView(view,childAdapter);
}
});
//click event listener of sub gridview
gv.setOnExpandItemClickListener(new ExpandableGridView.OnExpandItemClickListener() {
@Override
public void onItemClick(int position, Object clickPositionData) {
Toast.makeText(getBaseContext(),clickPositionData.toString()+"clicked",Toast.LENGTH_LONG).show();
}
});
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
}
您在这里得到错误的想法。像链接你分享1父1儿童:你只需要1个扩展的GridView和2个适配器
ExpandableGridView countryGridView = (ExpandableGridView)findViewById(R.id.country_grid);
ArrayAdapter<String> countryAdapter = new ArrayAdapter<String>(getBaseContext(),R.layout.grid_item, R.id.grid_item, countryData);
// 1.Set adapter for the grid view
countryGridView.setAdapter(countryAdapter);
// 2.Add click event listener to the grid view, expand grid view when item is clicked
countryGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// expand the grid view
countryGridView.expandGridViewAtView(view, new ArrayAdapter<String>(getBaseContext(),
R.layout.grid_item, R.id.grid_item, stateData));
}
});
你正在做的方式是你有2个GridView的,所以你只需要删除正常的GridView。从代码中删除R.id.childView
。