java - 如何通过单击 ListView 项并将值发送到对话框来显示来创建自定义对话框?

标签 java android android-fragments dialog

<分区>

下面是我的代码,我不知道如何在 ListView 中为我的项目添加对话框。

package com.example.bookstore;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class Psihology extends AppCompatActivity {

    ListView mListView;



    int [] images = {
            R.drawable.alchemist,
            R.drawable.hippie,
            R.drawable.child,
            R.drawable.powerofhabbit,
            R.drawable.kakobituvekupravu,
            R.drawable.metafizikapolneljubavi,
            R.drawable.otemeljumorala,
    };

String[] names = {
"Alchemist - Paulo Koeljo",
        "Hippie - Paulo Koeljo",
        "Child health psihology - Julie Turner",
        "The Power of Habbit - Charles Duhigg ",
        "Kako biti uvjek u pravu - Artur Sopenhauer",
        "Metafizika polne ljubavi - Artur Sopenhauer",
        "O temelju morala - Artur Sopenahuer"
};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_psihology);

        mListView = findViewById(R.id.listViewPsihology);

        CustomAdaptorr customAdaptor = new CustomAdaptorr();
        mListView.setAdapter(customAdaptor);
    }

        class CustomAdaptorr extends BaseAdapter{

            @Override
            public int getCount() {
                return 7;

            }

            @Override
            public Object getItem(int position) {
                return null;
            }

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

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view =  getLayoutInflater().inflate(R.layout.schoollayout,null);
                ImageView mImageView = view.findViewById(R.id.imageView);
                TextView mTextView = view.findViewById(R.id.textView);

                mImageView.setImageResource(images[position]);
                mTextView.setText(names[position]);

                return view;
            }
        }



    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu,menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.school:
                Intent intent = new Intent(Psihology.this,School.class);
                startActivity(intent);
                return true;
            case R.id.psihology:
                Intent intentt = new Intent(Psihology.this,Psihology.class);
                startActivity(intentt);
                return true;
            case R.id.philosophy:
                Intent intenttt = new Intent(Psihology.this,Philosophy.class);
                startActivity(intenttt);
                return true;
            case R.id.newWriters:
                Intent intentttt = new Intent(Psihology.this,NewWriters.class);
                startActivity(intentttt);
                return true;
            case R.id.other:
                Intent intenttttt = new Intent(Psihology.this,Other.class);
                startActivity(intenttttt);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }


}

所以我的问题是:如何为每个图书项目显示一个对话框,以显示图书项目的信息,如图书名称、作者、图书价格、发行年份等?

最佳答案

在您的情况下,Dialog 应该有单独的 xml 文件和扩展 DialogFragment 的 java,它在创建该对话框的实例时在 newInstance 方法中获取对话框所需的输入。 这是一个例子:

public class MyDialog extends DialogFragment
{
    private static final String KEY_AUTH = "author";
    private static final String KEY_PRICE = "price";
    private static final String KEY_YEAR = "year";
    private TextView txtauthor;
    private TextView txtprice ;
    private TextView txtyear ;


public static MyDialog newInstance(String author, String price, String year )
{
    Bundle args = new Bundle();
    args.putString(KEY_AUTH , author);
    args.putString(KEY_PRICE , price);
    args.putString(KEY_YEAR , year );

    MyDialog  d = new MyDialog ();
    d.setArguments(args);

    return d;
}

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)
{
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.my_dialoge_layout, null);

    initTextViews(view);

    MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext());

    builder.setView(view);

    return builder.create();

 }


    private void initTextViews(View view)
    {

      //get views
        txtauthor= view.findViewById(R.id.txtauthor);
        txtprice = view.findViewById(R.id.txtprice );
        txtyear = view.findViewById(R.id.txtyear );
      //..and so on 

        //then set values 
        txtauthor.setText(getArguments().getString(KEY_AUTH ));
        txtprice.setText(getArguments().getString(KEY_PRICE ));
        txtyear.setText(getArguments().getString(KEY_YEAR ));
    }
}//end of  class MyDialog 

当你想调用 dialog 时,通过上面提到的 newInstance 方法调用它:

MyDialog dialog = MyDialog .newInstance("some author", "some price", "some year");
dialog.show(getFragmentManager(), "MyDialogTag");

关于java - 如何通过单击 ListView 项并将值发送到对话框来显示来创建自定义对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59437655/

相关文章:

java - 如何在不读取的情况下关闭持久 HTTP 连接

java - recycleview 设置适配器中支持 v4 view.NestedScrollingChild2 时出错

android - 自定义操作栏菜单项一键不响应

Java 最佳实践 : nested getters? 或委托(delegate)?

android - 对于 http 连接中的任何设备,dalvik 代理 header 是否唯一?

java - 实现施特拉森算法

java - 测试 fragment Activity 时错误膨胀类 fragment

android - 使用 BottomBar 和 fragment 容器禁用 Android fragment 重新加载

java - 将 bundle Assets 的文件路径传递到 Android 上的外部库

java - JScrollPane 内 JPanel 上的鼠标坐标偏移