如何使用开关案例从片段中打开新活动



嗨,我制作的开关盒有问题。我想从片段中打开一个新活动。

这是我的交换机:

@Override
public void onClick(View v)
{
    switch (v.getId())
    {
        //When the change password button is pressed...
        case R.id.btn_chg_password:
            showDialog();
            break;
        //When the Logout but is pressed...
        case R.id.btn_logout:
            logout();
            break;
        //When the write diary button is pressed...
        case R.id.btn_write:
            goToWriteDiary();
            break;
        //When the Read Diary button is pressed...
        case R.id.btn_read:
            Intent intent=new Intent(getActivity(), ReadFragment.class);
            startActivity(intent);
            break;
    }
}

这是我希望用按钮 = 打开的活动 = btn_read

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ReadFragment extends AppCompatActivity
{
private RecyclerView recyclerView;
private ArrayList<Diary> data;
private DataAdapter adapter;
private SharedPreferences pref;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_read);
    initViews();
}
private void initViews()
{
    recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);
    String unique_id = pref.getString(Constants.UNIQUE_ID,"");
    loadJSON(unique_id);
}
private void loadJSON(String unique_id)
{
    Gson gson = new GsonBuilder()
            .setLenient()
            .create();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
    ServerRequest request = new ServerRequest();
    Diary diary = new Diary();
    diary.setUnique_id(unique_id);
    request.setOperation(Constants.CREATE_DIARY_OPERATION);
    RequestInterface requestInterface = retrofit.create(RequestInterface.class);
    Call<DiaryResponse> call = requestInterface.getDiary();
    call.enqueue(new Callback<DiaryResponse>()
    {
        @Override
        public void onResponse(Call<DiaryResponse> call, Response<DiaryResponse> response)
        {
            DiaryResponse diaryResponse = response.body();
            data = new ArrayList<>(Arrays.asList(diaryResponse.getDiary()));
            adapter = new DataAdapter(data);
            recyclerView.setAdapter(adapter);
        }
        @Override
        public void onFailure(Call<DiaryResponse> call, Throwable t)
        {
            Log.d("Error",t.getMessage());
        }
    });
}
}

任何帮助将不胜感激

EventBus 在这里非常有用。您可以参考我现有的示例来解决您的问题。

开始活动代码似乎很完美。

可以在ReadFragment活动代码的以下行Null Pointer Exception

 String unique_id = pref.getString(Constants.UNIQUE_ID,"");

pref 不是初始化的,所以在 onCreate 方法中初始化。

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_read);
    pref= getSharedPreferences("your_pref_name", Context.MODE_PRIVATE);
    initViews();
}

最新更新