【问题标题】:How to display text for an item in a list view Android Studio如何在列表视图 Android Studio 中显示项目的文本
【发布时间】:2016-06-18 18:52:52
【问题描述】:

我很难弄清楚这一点。我想要做的是根据我从列表视图中单击的项目显示不同的描述。假设我选择了列表中的第三个食谱。它应该切换到另一个活动并仅显示该配方的描述,而不显示任何其他配方。我在字符串文件夹中有描述。

在我的代码中,它有一个监听器和一个打开其他活动的意图。当我运行应用程序时,一旦我单击列表中的项目,它就会关闭。之前,我没有使用侦听器,而是使用方法并在 xml 中为 textview 和 image view 设置了 onClick。这将切换活动,但不会显示任何描述。

public class MainActivity extends AppCompatActivity {                                           
private RecipesDataSource ds;                                                               
private ListView recipesListView;                                                           

@Override                                                                                   
protected void onCreate(Bundle savedInstanceState) {                                        
    super.onCreate(savedInstanceState);                                                     
    setContentView(R.layout.activity_main);                                                 
    ds = new RecipesDataSource();                                                           
    recipesListView = (ListView)findViewById(R.id.listView1);                               
    recipesListView.setAdapter(new RecipesDataSourceAdapter(this,ds));                      
    recipesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {          
        @Override                                                                           
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
            Intent i = new Intent(MainActivity.this, RecipesInfoActivity.class);            
            i.putExtra("recipe_desc", position);                                            
            startActivity(i);                                                               
        }                                                                                   
    });                                                                                     
}                                                                                           

}                                           

这是我希望显示描述的第二个活动。它有一个用于保存文本的文本视图。

public class RecipesInfoActivity extends AppCompatActivity {
TextView recipeInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recipes_info);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    recipeInfo = (TextView)findViewById(R.id.recipeInfoTextView);
    Intent i = getIntent();
    String pos = i.getStringExtra("recipe_desc");
    recipeInfo.setText(writeDesc(pos));
}

public int writeDesc(String pos)
{
    int position = Integer.parseInt(pos);
    int desc = 0;
    if(position==0)
    {
        desc = R.string.description1;
    }
    else if(position==1)
    {
        desc = R.string.description2;
    }
    else if(position==2)
    {
        desc = R.string.description3;
    }
    else if(position==3)
    {
        desc = R.string.description4;
    }
    else if(position==4)
    {
        desc = R.string.description5;
    }
    else if(position==5)
    {
        desc = R.string.description6;
    }
    else if(position==6)
    {
        desc = R.string.description7;
    }
    return desc;
}

}                                                    

方法writeDesc() 根据putExtra() 从MainActivity 传递的位置返回描述。变量是整数,因为我将 ArrayList 与整数一起使用。

由于我是 Android Studio 新手,请不要给我复杂的代码。如果您有解决方案,请尽可能简单。

我需要帮助的总结:

-根据从列表视图中单击的项目,为第二个活动编写描述。例如:如果我点击鸡肉的食谱,它会显示鸡肉的食谱(我将这些描述作为字符串,所以你不必担心。)

-我应该使用侦听器还是在从列表视图中单击项目时调用的单独方法(在 xml 中使用 android:onClick="whatevermethodnamehere" 而不是它现在在带有侦听器的主要活动中的方式)。监听器由于某种原因没有切换到下一个活动并崩溃,但onClick 没有崩溃并切换,但没有显示任何描述。

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    既然你已经弄清楚了困难的部分,即使用ItemClickListener,我相信你只是需要一些方向,所以就在这里。

    根据位置,在您的intent.putExtra中添加不同的文字

    例如而不是i.putExtra("recipe_desc", position); 使用这个i.putExtra("key","recipe_desc");

    现在由您决定如何做。我有 2 种口味作为快速建议 Flavor1:制作一个映射器类,用正确的描述映射recipe_desc。例如如果您在recipe_desc 中收到“鸡”,则此映射器类包含映射到它的鸡收据。在activitB 中,只需使用switch-case 即可获得正确的值

    Flavor2:不使用activityB中的mapper类,直接根据位置将描述放入你的intent.extra。现在只显示你从意图中得到的任何东西。所以在 flavor2 中,你的 switch-case 移动到 activityA

    【讨论】:

      【解决方案2】:

      为什么不让 writeDesc 方法返回描述的字符串而不是整数。在我看来,您只是在返回 int 值...

      【讨论】:

      • 我正在返回 int,因为如果我将其更改为 String,代码下方会有一条红线。我认为这是因为我使用的包含描述的数组列表是 int。它适用于食物的名称,但由于某种原因它不适用于描述。
      • 您遇到错误,因为 R.string.description 将返回采访。您需要做的是将返回类型更改为字符串并将 R.string.description 替换为 getResources().getString(R.string.description) ,这将返回您想要的字符串值。另外,将 desc 的类型更改为 String
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      相关资源
      最近更新 更多