Как создать диалог с GridLayout? - PullRequest
0 голосов
/ 26 октября 2019

Как создать диалог, который использует GridLayout и когда пользователь нажимает на элемент этого макета, а затем нажимает кнопку «выбрать». Элемент GridLayout состоит из ImageView. Как реализовать этот диалог?

Ответы [ 2 ]

0 голосов
/ 26 октября 2019
GridView gridView = new GridView(this);
gridView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, your_list));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // do something here
            }
 });
 AlertDialog.Builder builder = new AlertDialog.Builder(this);
 builder.setView(gridView);
 builder.setTitle("ALERT BOX WITH GRID");
 builder.show();

Попробуйте, это на основе одного столбца, сетки данных.

Если вы хотите изображение, пожалуйста, следуйте этому, https://android -developers.googleblog.com / 2012/05/using-dialogfragments.html

0 голосов
/ 26 октября 2019

1 -Сделайте нужный вам макет

2 - создайте класс myDialog, который расширяет DialogFragment и заставит его раздувать макет, который вы создали

3 - во фрагмент добавьте нужные вам функции

Но я использую gridview, gridlayout проще, но я предлагаю использовать gridview

Здесь класс диалога

public class myDialog extends DialogFragment implements dis_listener {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_dialog_layout,container,false);
    GridView gv = view.findViewById(R.id.dialog_grid);

    grid_adapt adapt = new grid_adapt(getActivity(),this);
    gv.setAdapter(adapt);
    return view;



}
@Override
public void listen() {
    this.dismiss();
}
}

grid_adapt: ​​-

public class grid_adapt extends BaseAdapter {
private Context cxt;
//pass the data you want
//private ArrayList<Integers> imgs
private dis_listener img_dismiss;
grid_adapt(Context context,dis_listener dismisser){
    this.cxt = context;
    this.img_dismiss = dismisser;
}
@Override
public int getCount() {
    //return the data length
    //return imgs.length
    return 3;

}

@Override
public Object getItem(int position) {
    //return imgs.get(position);
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    viewHolder vh;
    if(convertView == null) {
        convertView= LayoutInflater.from(cxt).inflate(R.layout.grid_item, parent, false);
        vh = new viewHolder(convertView);
        convertView.setTag(vh);

    }else{
        vh = (viewHolder) convertView.getTag();
    }
    vh.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(cxt,"Open",Toast.LENGTH_LONG).show();
        }
    });
     vh.img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            img_dismiss.listen();
        }
    });
    return convertView;
}
static class viewHolder{
    private Button button;
    private ImageView img;
    viewHolder(View view){
        button = view.findViewById(R.id.dialog_item_button);
        img = view.findViewById(R.id.img);
    }

}

}

В интерфейсе есть только один метод с именем listen

result: enter image description here

...