首页 > 解决方案 > 通过意图从数据库获取项目的问题

问题描述

我开发了一个词汇应用程序,该应用程序在主要活动中有一个回收器视图,并显示了两列数据库:单元编号和单元名称。当我点击每个项目时,它会转到另一个名为内页的活动,该活动有 6 个文本视图,它必须显示其他该行的项目,如单词定义单元号拼写含义和词性。但不幸的是,文本视图是空的,它只显示一个值,即单元号。请看看我的代码并告诉我我错过了什么。

这是我的代码:

主页:

public class TabWord extends Fragment {

private RecyclerView recyclerView;
private ArrayList<WordItem> items = new ArrayList<>();
private WordTab adapter;
private DatabaseHelper databaseHelper;
private Cursor cursor ;

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.tab_word, container, false);
    recyclerView = viewGroup.findViewById(R.id.recyclerview_word);
    adapter = new WordTab(items, getContext());
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerView.setAdapter(adapter);
    loadDatabase();
    return viewGroup;
}


public void loadDatabase() {

    databaseHelper = new DatabaseHelper(getActivity());

    try {
        databaseHelper.checkAndCopyDatabase();
        databaseHelper.openDatabase();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    try {
        cursor = databaseHelper.QueryData("select * from ielts");
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    WordItem item = new WordItem();
                    item.setUnitName(cursor.getString(2));
                    item.setUnitNumber(cursor.getString(1));
                    items.add(item);
                } while (cursor.moveToNext());
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    adapter = new WordTab(items, getActivity());
    adapter.setOnTapListener(new OnTapListener() {
        @Override
        public void OnTapView(int position) {

        }
    });
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(linearLayoutManager);
    recyclerView.setAdapter(adapter);
}


}

适配器:

public class WordTab extends RecyclerView.Adapter<WordTab.ViewHolder> {

public static List<WordItem> wordItems;
private Context context;
private OnTapListener onTapListener;

public WordTab(List<WordItem> wordItems, Context context) {
    this.wordItems = wordItems;
    this.context = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_word, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {

    WordItem wordItem = wordItems.get(position);
    holder.unitNumber.setText(wordItem.getUnitNumber());
    holder.unitName.setText(wordItem.getUnitName());
    holder.cardView.setId(position);
    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (onTapListener != null) {
                onTapListener.OnTapView(position);
                int position = v.getId();
                Intent intent = new Intent(context, InnerPage.class);
                intent.putExtra("name", "words");
                intent.putExtra("id", position + "");
                context.startActivity(intent);
            }
        }
    });

}

@Override
public int getItemCount() {
    return wordItems.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    TextView unitName, unitNumber;
    CardView cardView;

    public ViewHolder(View itemView) {
        super(itemView);
        unitName = itemView.findViewById(R.id.unit_name);
        unitNumber = itemView.findViewById(R.id.unit_number);
        cardView= itemView.findViewById(R.id.card_view_word);
    }
}

public void setOnTapListener(OnTapListener onTapListener) {
    this.onTapListener = onTapListener;
}
}

模型:

 public class WordItem {

private int id;
private String unitNumber;
private String unitName;
private String word;
private String phonetic,pos,persian,definition;

public WordItem() {

    this.unitName = unitName;
    this.unitNumber = unitNumber;
    this.word = word;
    this.phonetic = phonetic;
    this.pos = pos;
    this.persian = persian;
    this.definition = definition;
    this.id = id;
}

public String getWord() {
    return word;
}

public void setWord(String word) {
    this.word = word;
}

public String getPhonetic() {
    return phonetic;
}

public void setPhonetic(String phonetic) {
    this.phonetic = phonetic;
}

public String getPos() {
    return pos;
}

public void setPos(String pos) {
    this.pos = pos;
}

public String getPersian() {
    return persian;
}

public void setPersian(String persian) {
    this.persian = persian;
}

public String getDefinition() {
    return definition;
}

public void setDefinition(String definition) {
    this.definition = definition;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getUnitNumber() {
    return unitNumber;
}

public void setUnitNumber(String unitNumber) {
    this.unitNumber = unitNumber;
}

public String getUnitName() {
    return unitName;
}

public void setUnitName(String unitName) {
    this.unitName = unitName;
}

}

内页:

public class InnerPage extends AppCompatActivity {

private int id;
private String unitNumber,word,phonetic,pos,persian,definition;
private TextView unitTxt,wordTxt,phoneticTxt,posTxt,persianTxt,definitionTxt;
private int layoutId;
private String pageName;

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

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        layoutId = Integer.parseInt(extras.getString("id"));
        pageName = extras.getString("name");

        if (pageName.equals("words")){
            id = WordTab.wordItems.get(layoutId).getId();
            unitNumber = WordTab.wordItems.get(layoutId).getUnitNumber();
            word = WordTab.wordItems.get(layoutId).getWord();
            phonetic = WordTab.wordItems.get(layoutId).getPhonetic();
            pos = WordTab.wordItems.get(layoutId).getPos();
            persian = WordTab.wordItems.get(layoutId).getPersian();
            definition = WordTab.wordItems.get(layoutId).getDefinition();
        }
    }

    unitTxt = findViewById(R.id.unit);
    wordTxt = findViewById(R.id.word);
    phoneticTxt = findViewById(R.id.phonetic);
    posTxt = findViewById(R.id.txtSpell);
    persianTxt = findViewById(R.id.farMean);
    definitionTxt = findViewById(R.id.definition);

    unitTxt.setText(unitNumber);
    wordTxt.setText(word);
    phoneticTxt.setText(phonetic);
    posTxt.setText(pos);
    persianTxt.setText(persian);
    definitionTxt.setText(definition);

}
}

标签: javaandroid

解决方案


推荐阅读